树的创建及三种遍历方式
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
class Tree:
def __init__(self):
self.queue = []
self.flag = 0
self.root = None
'''在建树的过程中,每个node都已经是一个具有三属性的对象了'''
def creat_tree(self,list):
while True:
if len(list) == 0:
return
if self.flag == 0:
self.root = Node(list[0])
self.flag = 1
'''注意!此时是将一个包含三属性的对象加到队列中!'''
self.queue.append(self.root)
list.pop(0)
else:
'''队列中第一个队列中的第一个节点(该节点左右孩子不完全存在)
添加treeNode的左右孩子,当添加treeNode的右孩子之后,
将队列中的第一个节点出队。'''
treenode = self.queue[0]
if treenode.left == None:
treenode.left == Node(list[0])
self.queue.append(treenode.left)
list.pop(0)
else:
treenode.right == Node(list[0])
self.queue.append(treenode.left)
list.pop(0)
self.queue.pop(0)
'''此时树已建成,节点之间通过引用连接,每个节点都是一个对象'''
'''前序遍历:对于任意节点,先打印root,再打印左子树,再打印右字数,递归实现直到递归边界'''
def pre(self,root):
if root == None:
return
else:
print(root.data)
self.pre(root.left)
self.pre(root.right)
def mid(self,root):
if root == None:
return
else:
self.pre(root.left)
print(root.data)
self.pre(root.right)
def late(self,root):
if root == None:
return
else:
self.pre(root.left)
self.pre(root.right)
print(root.data)
if __name__=='__main__':
lis = [1,2,3,4,5,6,7,8,9]
tree = Tree()
tree.creat_tree(lis)
tree.pre(tree.root)