Python基础——树

这篇博客介绍了如何使用Python构建二叉树数据结构。首先定义了树节点类,包含节点值、左子树和右子树属性。接着,通过init()方法初始化树,依据根节点和队列t来存储节点顺序。在构建过程中,根据根节点的左右子树情况插入新节点,并在左右子树都已赋值后从队列中移除节点。最后展示了构造出的二叉树形态,并预告了后续会更新更多关于树的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    二叉树是最基本的数据结构,构造一棵二叉树也是基本操作。这篇记录一下自己构造二叉树的过程:

定义树节点类
class TreeNode(object):
    def __init__(self,x):
        self.val=x
        self.left=None
        self.right=None

包含了树的节点值,左子树和右子树。

定义树
class Tree(object):
    def __init__(self):
        self.root=TreeNode(None)
        self.t=[]
    def add(self,val):
        treenode=TreeNode(val)
        if self.root.val==None:
            self.root=treenode
            self.t.append(self.root)
            return
        else: 
            tree_exist_node=self.t[0]
            print(self.t[0].val)
            if tree_exist_node.left==None:
                tree_exist_node.left=treenode
                self.t.append(tree_exist_node.left)
                return
            else: 
                tree_exist_node.right=treenode
                self.t.append(tree_exist_node.right)
                self.t.pop(0)

构造思路:init()方法,初始化一棵树,这棵树包含了root根结点和一个t队列,存储树的节点顺序。
    先判断树是不是为空(即判断根结点是不是为None),如果是,则把现在传入的这个节点treenode当作树的根。
    如果树不为空,则先读入目前的根节点self.t[0],如果目前的根结点的左子树为空,则把现在传入的treenode赋上去。
    如果树不为空,则先读入目前的根节点self.t[0],如果目前的根结点的左子树不为空,右子树为空,则把现在传入的treenode赋上去。
    如果一个节点的左右子树都赋过值了,就将它从t中弹出(用pop操作)。一定要弹出左右子树都满了的节点,这样,下一次读入self.t[0]的时候才能切换成后面的节点。否则一直都只有三个节点,这个树是构建不起来的。即tree_exist_node=self.t[0]self.t.pop(0)是一对呼应的语句,缺一不可。

调用
t1=[2,1,3,None,4,None,7]
t=Tree()
for i in t1:
    print("-----------",i)
    t.add(i)

构造出来的树如下:

                 2                             
                / \                            
                1   3                        
                 \   \                      
                  4   7      

关于树还有很多别的操作,我会持续更新~

                                   memoryjdch编辑于2018.1.25
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值