"""
bitree.py 二叉树的遍历实践
思路分析:
1. 使用链式结构存储二叉树的节点数据
2. 节点中存储 数据, 左孩子链接,右孩子链接 三个属性
"""
class Node:#结点的类
def __init__(self,val,left=None,right=None):
self.val = val
self.left = left
self.right = right
class BiTree:#二叉树类
def __init__(self,root):
self.root = root
# 前序遍历二叉树
def preOrder(self, root):
if root is None:#如果根节点为空
return
# 访问根结点
print(root.val, end=' ')
# 前序遍历左子树
self.preOrder(root.left)
# 前序遍历右子树
self.preOrder(root.right)
# 中序遍历二叉树
def inOrder(self, root):
if root is None:
return
# 中序遍历左子树
self.inOrder(root.left)
# 访问根结点
print(root.val, end=' ')
# 中序遍历右子树
self.inOrder(root.right)
# 后遍历二叉树
def postOrder(self, root):
if root is None:
return
# 后序遍历左子树
self.postOrder(root.left)
# 后序遍历右子树
self.postOrder(root.right)
# 访问根结点
print(root.val, end=' ')
if __name__ == '__main__':
#创建叶子结点
b = Node('B')
f = Node('F')
g = Node('G')
h = Node('H')
i = Node('I')
#创建非叶子结点
d = Node('D',f,g)
e = Node('E', h, i)
c = Node('C', d, e)
a = Node('A', b, c)# 整个树根
#创建一个二叉树对象bt,其中a结点对象作为根节点传入
bt = BiTree(a)
#前序遍历二叉树
print("前序遍历:", end=' ')
bt.preOrder(bt.root)
print()
# 中序遍历二叉树
print("中序遍历:", end=' ')
bt.inOrder(bt.root)
print()
# 后序遍历二叉树
print("后序遍历:", end=' ')
bt.postOrder(bt.root)
print()
