"""二叉树的实现"""
# 二叉树节点类
class Node:
def __init__(self, data=None, left=None, right=None):
self.data = data
self.left = left # 左节点
self.right = right # 右节点
# 二叉树类
class Tree:
def __init__(self):
self.root = None # 创建空树
self.lst = [] # 存放节点列表
# 添加节点
def add(self, data):
tmp = Node(data) # 为添加的数据创建节点
if not self.root:
self.root = tmp # 如果是空树,对根节点赋值新节点
self.lst.append(self.root)
else:
first_lst_data = self.lst[0] # 获取列表的第一个数据
if first_lst_data.left is None:
first_lst_data.left = tmp # 左子节点为空:添加到左子节点处
self.lst.append(first_lst_data.left) # 存进列表
else:
first_lst_data.right = tmp # 右子节点为空:添加到右子节点处
self.lst.append(first_lst_data.right)
self.lst.pop(0) # 弹出列表中的第一个节点, 左右节点依次交替为第一节点
# 先序遍历二叉树并显示(根节点-->左子树--->右子树)
def front_show(self, tree):
if not tree:
# 遍历到最后一层节点了
return
print(tree.data) # 0 1 3 7 8 4 9 2 5 6
self.front_show(tree.left) # 调用自身遍历左节点,这里相当于递归
self.front_show(tree.right) # 遍历右节点
# 中序遍历二叉树并显示(左子树-->根节点-->右子树)
def middle_show(self, tree):
if not tree:
return
self.middle_show(tree.left) # 遍历左节点
print(tree.data) # 7 3 8 1 9 4 0 5 2 6
self.middle_show(tree.right) # 遍历右节点
# 后序遍历二叉树并显示 (左子树--->右子树-->根节点)
def behind_show(self, tree):
if not tree:
return
self.behind_show(tree.left) # 遍历左节点
self.behind_show(tree.right) # 遍历右节点
print(tree.data) # 7 8 3 9 4 1 5 6 2 0
# 广度优先遍历二叉树并显示(逐层遍历访问)
def level_show(self):
if not self.root:
# 空树
return
nodes = [] # 存放节点列表
cur = self.root
nodes.append(cur)
while nodes:
cur = nodes.pop(0)
print(cur.data) # 0 1 2 3 4 5 6 7 8 9
if cur.left:
# 左节点为真时, 添加到列表
nodes.append(cur.left)
if cur.right:
# 右节点为真时, 添加到列表
nodes.append(cur.right)
if __name__ == "__main__":
# 产生10个数据放入二叉树中
values = range(10)
my_tree = Tree()
for value in values:
my_tree.add(value)
# 遍历二叉树
print("前序遍历")
my_tree.front_show(my_tree.root)
print("中序遍历")
my_tree.middle_show(my_tree.root)
print("后序遍历")
my_tree.behind_show(my_tree.root)
print("广度优先遍历")
my_tree.level_show()
二叉树学习笔记python
最新推荐文章于 2024-09-03 10:31:55 发布