class Node():
"节点"
def __init__(self, elem):
self.elem = elem
self.lchild = None
self.rchild = None
class Tree():
"二叉树"
def __init__(self):
self.root = None
def add(self, item):
node = Node(item)
if self.root is None:
self.root = node
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
if cur_node.lchild is None:
cur_node.lchild = node
return
else:
queue.append(cur_node.lchild)
if cur_node.rchild is None:
cur_node.rchild = node
return
else:
queue.append(cur_node.rchild)
def breadth_travel(self):
"广度遍历(层次遍历)"
if self.root is None:
return
queue = [self.root]
while queue:
cur_node = queue.pop(0)
print(cur_node.elem, end= " ")
if cur_node.lchild is not None:
queue.append(cur_node.lchild)
if cur_node.rchild is not None:
queue.append(cur_node.rchild)
def pre_order(self, node):
"先序遍历:根-左-右"
if node is None:
return
print(node.elem, end=" ") #根
self.pre_order(node.lchild) #左
self.pre_order(node.rchild) #右
def in_order(self, node):
"中序遍历:左-根-右"
if node is None:
return
self.in_order(node.lchild) # 左
print(node.elem, end=" ") #根
self.in_order(node.rchild) #右
def post_order(self, node):
"后序遍历:左-右-根"
if node is None:
return
self.post_order(node.lchild) # 左
self.post_order(node.rchild) # 右
print(node.elem, end=" ") #根
if __name__ == "__main__":
tree = Tree()
tree.add(0)
tree.add(1)
tree.add(2)
tree.add(3)
tree.add(4)
tree.add(5)
tree.add(6)
tree.add(7)
tree.add(8)
tree.add(9)
print("层次")
tree.breadth_travel()
print("\n先序")
tree.pre_order(tree.root)
print("\n中序")
tree.in_order(tree.root)
print("\n后序")
tree.post_order(tree.root)