二叉树是最基本的数据结构,构造一棵二叉树也是基本操作。这篇记录一下自己构造二叉树的过程:
定义树节点类
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构建二叉树数据结构。首先定义了树节点类,包含节点值、左子树和右子树属性。接着,通过init()方法初始化树,依据根节点和队列t来存储节点顺序。在构建过程中,根据根节点的左右子树情况插入新节点,并在左右子树都已赋值后从队列中移除节点。最后展示了构造出的二叉树形态,并预告了后续会更新更多关于树的操作。
4061

被折叠的 条评论
为什么被折叠?



