class Node(object):
"""二叉树节点"""
def __init__(self, item):
self.item = item
self.left_child = None
self.right_child = None
class BinaryTree(object):
"""二叉树"""
def __init__(self):
self.root = None
def add(self, item):
"""添加节点"""
node = Node(item)
if self.root is None:
self.root = node
return None
else:
q = []
q.append(self.root)
while q:
current_node = q.pop(0)
if current_node.left_child is None:
current_node.left_child = node
return None
else:
q.append(current_node.left_child)
if current_node.right_child is None:
current_node.right_child = node
return None
else:
q.append(current_node.right_child)
def breadth_travel(self):
"""利用队列实现树的层次遍历"""
if self.root is None:
return None
else:
q = []
q.append(self.root)
while q:
current_node = q.pop(0)
print(current_node.item)
if current_node.left_child is not None:
q.append(current_node.left_child)
if current_node.right_child is not None:
q.append(current_node.right_child)
def prev_travel(self, node):
"""先序遍历:根->左->右"""
if node is None:
return None
else:
print(node.item)
self.prev_travel(node.left_child)
self.prev_travel(node.right_child)
def mid_travel(self, node):
"""中序遍历:左->根->右"""
if node is None:
return None
else:
self.mid_travel(node.left_child)
print(node.item)
self.mid_travel(node.right_child)
def post_travel(self, node):
"""后序遍历:左->右->根"""
if node is None:
return None
else:
self.post_travel(node.left_child)
self.post_travel(node.right_child)
print(node.item)
b_tree = BinaryTree()
for i in range(10):
b_tree.add(i)
print("层次遍历:")
b_tree.breadth_travel()
print("先序遍历:")
b_tree.prev_travel(b_tree.root)
print("中序遍历:")
b_tree.mid_travel(b_tree.root)
print("后序遍历:")
b_tree.post_travel(b_tree.root)