树结构之节点链接法实现Python

2020-10-23 11:31发布

除了链表嵌套法实现树,最形象就是节点链接法了。每个节点就相当于树的节点,树的节点是要连接的,并且有左子树和右子树,所以就和链表那样,用节点的某个变量保存下一个节点(两个子树),其实树是一个递归的数据结构。

首先定义一个树类,并初始化树。只有一个根节点,节点的值为定义时传进来的。因为需要左右两个子树,所以准备两个变量用于保存左右子树的引用。

class bin_tree(object):
    def __init__(self, root_value):
        self.key = root_value
        self.lc = None
        self.rc = None12345

然后定义了一个插入左子树的方法。和前面那篇文章一样,观察当然要插入的目标(子)树是否有没有左子树,如果没有,则直接赋值即可(当然首先要创建树再赋值)。如果有,则把原来的左子树替换掉,并把原来的左子树作为新插入左子树的左子树。

    def insert_lc(self, new_node):
        if self.lc == None:
            self.lc =  bin_tree(new_node)
        else:
            temp = bin_tree(new_node)
            temp.lc = self.lc
            self.lc = temp1234567

插入右子树同理。

    def insert_rc(self, new_node):
        if self.rc == None:
            self.rc =  bin_tree(new_node)
        else:
            temp = bin_tree(new_node)
            temp.rc = self.rc
            self.rc = temp1234567

然后就是一些小函数了,返回子树的值,设置根节点的值等等。

    def get_rc(self):
        return self.rc

    def get_lc(self):
        return self.lc

    def get_root_value(self):
        return self.key

    def set_root_value(self, new_obj):
        self.key = new_obj123456789101112

完整的代码测试一下。

# 链表实现树

class bin_tree(object):
    def __init__(self, root_value):
        self.key = root_value
        self.lc = None
        self.rc = None

    def insert_lc(self, new_node):
        if self.lc == None:
            self.lc =  bin_tree(new_node)
        else:
            temp = bin_tree(new_node)
            temp.lc = self.lc
            self.lc = temp

    def insert_rc(self, new_node):
        if self.rc == None:
            self.rc =  bin_tree(new_node)
        else:
            temp = bin_tree(new_node)
            temp.rc = self.rc
            self.rc = temp

    def get_rc(self):
        return self.rc

    def get_lc(self):
        return self.lc

    def get_root_value(self):
        return self.key

    def set_root_value(self, new_obj):
        self.key = new_obj
 
bt = bin_tree('a')
print(bt.get_root_value())

print(bt.get_lc())

bt.insert_lc('b')

print(bt.get_lc())

print(bt.get_lc().get_root_value())

bt.insert_rc('c')

print(bt.get_rc())

print(bt.get_rc().get_root_value())

bt.get_rc().set_root_value('hello')

print(bt.get_rc().get_root_value())



作者:qq_42907161

链接:https://blog.csdn.net/qq_42907161/article/details/108433547

来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。