Tree01-BuildingTree-NodeLinkedTable-1

该文章介绍了如何使用节点链表表示法来构建二叉树。定义了`TreeNode`类来创建树节点,包含数据、左子树和右子树属性,以及相关的方法如获取左右子节点和根节点值。此外,还定义了一个`BinaryTree`类用于插入新节点并维护树结构。在示例中展示了如何创建和操作二叉树。
摘要由CSDN通过智能技术生成

二叉树的节点链表表示法

# 方法2-节点链表表示法

class TreeNode:
    """
    定义树节点
    # 参数说明:
        data : 存储节点数据
        left : 节点左子树
        right: 节点右子树
    """
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

    def get_right_child(self):
        """返回右子树"""
        return self.right

    def get_left_child(self):
        """返回左子树"""
        return self.left


    def get_root_val(self):
        """返回根节点的数值"""
        return self.data

    def set_root_val(self, new_val):
        """修改根节点的数值"""
        self.data = new_val


class BinaryTree:
    """创建二叉树"""
    def __init__(self):
        self.root = None  # 初始化根节点
        self.ls = []  # 存储根节点(双亲节点)的位置值的队列

    def insertnode(self, data):
        """
            插入左子树: data 为左子树的根节点
            如果原来的树不存在左子树,那么 data 为左子树的根节点
            如果原来的树存在左子树,那么原来的左子树变为以 data 为根节点的左子树

            插入右子树:data 为右子树的根节点
            如果原来的树不存在左子树,那么 data 为左子树的根节点
            如果原来的树存在左子树,那么原来的右子树变为以 data 为根节点的右子树
        """

        node = TreeNode(data)
        if self.root is None:  # 判定树的根节点为空
            self.root = node  # 将当前
            self.ls.append(node)
        else:
            rootnode = self.ls[0]  # 取出第一个节点作为当前的根节点(不一定是整个树的根节点,而是双亲节点)
            if rootnode.left is None:  # 当前根节点的左子树是空树
                rootnode.left = node  # 将节点值赋给当前根节点的左子树
                self.ls.append(node)  # 将节点值存放在列表中作为双亲节点下次被取出来
            elif rootnode.right is None:  # 当前根节点的右子树是空树
                rootnode.right = node
                self.ls.append(node)
                self.ls.pop(0)  # 将列表中的第一个元素弹出,表示已经完成了左右子树的添加


# 主函数

if __name__ == '__main__':
    t = TreeNode('x')
    t.right = TreeNode('A')
    t.left = TreeNode('B')
    print('获取根节点:', t.get_root_val())
    print('返回左子树:', t.get_left_child())
    print('返回右子树:', t.get_right_child())
    print('重新设置根节点:', t.set_root_val('w'))
    print('返回新的根节点:', t.get_root_val())
    print('返回树结构:', t)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值