# 二叉树的实现
# 节点实现
class Node(object):
def __init__(self,item):
self.item = item
self.lchild = None
self.rchild = None
# 二叉树实现
class Bin_tree(object):
def __init__(self):
self.root = None
# 添加一个节点
def Add(self,item):
node = Node(item)
queue = [self.root]
# 树为空
if self.root == None:
self.root = node
return
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_search(self):
queue = [self.root]
if self.root == None:
return
while queue:
cur_node = queue.pop(0)
print(cur_node.item,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 preOrder(self,node):
if node is None:
return
print(node.item,end=' ')
self.preOrder(node.lchild)
self.preOrder(node.rchild)
# 中序优先遍历:左根右
def inOrder(self,node):
if node is None:
return
self.inOrder(node.lchild)
print(node.item,end=' ')
self.inOrder(node.rchild)
# 后序优先遍历:左右根
def postOrder(self,node):
if node is None:
return
self.postOrder(node.lchild)
self.postOrder(node.rchild)
print(node.item,end=' ')
bl = Bin_tree()
bl.Add(1)
bl.Add(2)
bl.Add(3)
bl.Add(4)
bl.Add(5)
bl.Add(6)
bl.Add(7)
bl.Add(8)
print("层次遍历:")
bl.breadth_search()
print()
print("先序遍历:")
bl.preOrder(bl.root)
print()
print("中序遍历:")
bl.inOrder(bl.root)
print()
print("后序遍历:")
bl.postOrder(bl.root)