
"""二叉树的实现"""
class Node:
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left
self.right = right
class Tree:
def __init__(self):
self.root = None
self.lst = []
def add(self, data):
tmp = Node(data)
if not self.root:
self.root = tmp
self.lst.append(self.root)
else:
first_lst_data = self.lst[0]
if first_lst_data.left is None:
first_lst_data.left = tmp
self.lst.append(first_lst_data.left)
else:
first_lst_data.right = tmp
self.lst.append(first_lst_data.right)
self.lst.pop(0)
def front_show(self, tree):
if not tree:
return
print(tree.data)
self.front_show(tree.left)
self.front_show(tree.right)
def middle_show(self, tree):
if not tree:
return
self.middle_show(tree.left)
print(tree.data)
self.middle_show(tree.right)
def behind_show(self, tree):
if not tree:
return
self.behind_show(tree.left)
self.behind_show(tree.right)
print(tree.data)
def level_show(self):
if not self.root:
return
nodes = []
cur = self.root
nodes.append(cur)
while nodes:
cur = nodes.pop(0)
print(cur.data)
if cur.left:
nodes.append(cur.left)
if cur.right:
nodes.append(cur.right)
if __name__ == "__main__":
values = range(10)
my_tree = Tree()
for value in values:
my_tree.add(value)
print("前序遍历")
my_tree.front_show(my_tree.root)
print("中序遍历")
my_tree.middle_show(my_tree.root)
print("后序遍历")
my_tree.behind_show(my_tree.root)
print("广度优先遍历")
my_tree.level_show()