第一 实现树的结构
class Node():
# 构造函数,初始化节点对象,包含数据和左右子节点
def __init__(self, data=None):
self.data = data # 节点存储的数据
self.left = None # 左子节点,默认为None
self.right = None # 右子节点,默认为None
# 设置节点数据的方法
def set_data(self, data):
self.data = data # 将传入的数据赋值给节点的data属性
# 获取节点数据的方法
def get_data(self):
return self.data # 返回节点的data属性
# 设置左子节点的方法
def set_left(self, node):
self.left = node # 将传入的节点赋值给当前节点的left属性
# 获取左子节点的方法
def get_left(self):
return self.left # 返回当前节点的left属性,即左子节点
# 设置右子节点的方法
def set_right(self, node):
self.right = node # 将传入的节点赋值给当前节点的right属性
# 获取右子节点的方法
def get_right(self):
return self.right # 返回当前节点的right属性,即右子节点
if __name__ == '__main__':
# 创建根节点,数据为'a'
root_node = Node('a')
# 创建左子节点,数据为'b'
left_node = Node('b')
# 创建右子节点,数据为'c'
right_node = Node('c')
# 将左子节点设置到根节点的左子节点位置
root_node.set_left(left_node)
# 将右子节点设置到根节点的右子节点位置
root_node.set_right(right_node)
# 打印根节点的数据,左子节点的数据和右子节点的数据
print(root_node.get_data(), root_node.get_left().data, root_node.get_right().data)
第二 二叉树递归遍历
#实现树的递归遍历(前、中、后以及层次的遍历),首先定义实现树结构的类Node。编写三个函数proorderO)、posorder0)和mid order0)分别实现先序遍历后序遍历和中序遍历。 from collections import deque class Node(): # 构造函数,初始化节点对象,包含数据和左右子节点 def __init__(self, data=None, left=None, right=None): self.data = data # 节点存储的数据 self.left = left # 左子节点,默认为None self.right = right # 右子节点,默认为None # 前序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树 def pro_order(self): print(self.data) # 访问根节点 if self.left: # 如果存在左子节点,则递归遍历左子树 self.left.pro_order() if self.right: # 如果存在右子节点,则递归遍历右子树 self.right.pro_order() # 中序遍历:先递归遍历左子树,然后访问根节点,最后递归遍历右子树 def mid_order(self): if self.left: # 如果存在左子节点,则递归遍历左子树 self.left.mid_order() print(self.data) # 访问根节点 if self.right: # 如果存在右子节点,则递归遍历右子树 self.right.mid_order() # 后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点 def pos_order(self): if self.left: # 如果存在左子节点,则递归遍历左子树 self.left.pos_order() if self.right: # 如果存在右子节点,则递归遍历右子树 self.right.pos_order() print(self.data) # 访问根节点 # 层序遍历:使用队列按层次顺序访问节点 def row_order(self): queue = deque([self]) # 初始化队列,将根节点加入队列 while queue: # 当队列不为空时,进行遍历 current_tree = queue.popleft() # 从队列前端取出节点 print(current_tree.data) # 访问节点 if current_tree.left is not None: # 如果存在左子节点,则加入队列 queue.append(current_tree.left) if current_tree.right is not None: # 如果存在右子节点,则加入队列 queue.append(current_tree.right) # 自定义遍历:使用栈按特定顺序访问节点 def custom_order(self): stack = [self] # 初始化栈,将根节点加入栈 while stack: # 当栈不为空时,进行遍历 node = stack.pop() # 从栈末端取出节点 print(node.data) # 访问节点 if node.right is not None: # 如果存在右子节点,则加入栈 stack.append(node.right) if node.left is not None: # 如果存在左子节点,则加入栈 stack.append(node.left) # 主程序入口 if __name__ == '__main__': # 创建二叉树 tree = Node('A', Node('B', Node('D'), Node('E')), Node('C', Node('F'), Node('G'))) print("自定义遍历:") tree.custom_order() # 执行自定义遍历
返回结果:
第一
第二