建立和遍历均使用递归的方式进行,代码非常简洁。
建立:自上而下。每个节点处,都先递归建立左子树,直至左子树为空,再建立右子树。
前序遍历:每个节点处,先访问根节点,再访问左子树,最后访问右子树。
中序遍历:每个节点处,先访问左子树,再访问根节点,最后访问右子树。
后序遍历:每个节点处,先访问左子树,再访问右子树,最后访问根节点。
(代码中的递归顺序与遍历顺序完全相同,清晰易懂)
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
# 建立二叉树
def create(root):
a = input("请输入元素,‘#’表示该位置为空")
if a is '#':
root=None
else:
root=Node(a)
root.left=create(root.left)
root.right=create(root.right)
return root
# 前序遍历
def presearch(root):
if not root:
return None
else:
print(root.data)
presearch(root.left)
presearch(root.right)
# 中序遍历
def midsearch(root):
if not root:
return None
else:
midsearch(root.left)
print(root.data)
midsearch(root.right)
# 后序遍历
def postsearch(root):
if not root:
return None
else:
postsearch(root.left)
postsearch(root.right)
print(root.data)
root = None
root = create(root)
print("前序遍历结果:")
presearch(root)
print("中序遍历结果:")
midsearch(root)
print("后序遍历结果:")
postsearch(root)
以下图为例,依次输入元素:
我们建立的二叉树如下图所示:
三种遍历的执行结果如下:
更为复杂的树结构,请大家自行验证哈。