Python基础——树

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

定义树节点类

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

你可能感兴趣的:(python基础,python,数据结构,二叉树)