Python递归实现二叉树的镜像算法
二叉树的镜像指的是将二叉树中每个节点的左右子树交换位置,得到一个新的二叉树。
递归实现二叉树的镜像算法的基本思路是:
- 交换当前节点的左右子节点位置。
- 递归处理当前节点的左子节点,得到其对应的镜像树。
- 递归处理当前节点的右子节点,得到其对应的镜像树。
- 将当前节点的左右子节点替换为步骤2步和步骤3得到的左右子树。
代码演示如下:
# 定义二叉树节点结构体 class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None def mirror_binary_tree(root): # 递归出口:当节点为 None 时直接返回 if not root: return # 交换当前节点的左右子节点位置 root.left, root.right = root.right, root.left # 递归处理当前节点的左子节点,得到其对应的镜像树 mirror_binary_tree(root.left) # 递归处理当前节点的右子节点,得到其对应的镜像树 mirror_binary_tree(root.right) # 将当前节点的左右子节点替换为步骤2步和步骤3得到的左右子树 return root # 创建一个二叉树,并打印其先序遍历 def preorder_traversal(root): if not root: return print(root.val, end=' ') preorder_traversal(root.left) preorder_traversal(root.right) if __name__ == '__main__': # 构建二叉树 root = TreeNode('pidancode.com') root.left = TreeNode('is') root.right = TreeNode('awesome') root.left.left = TreeNode('Python') root.left.right = TreeNode('programming') root.right.left = TreeNode('language') root.right.right = TreeNode('!') # 输出原二叉树先序遍历 print('原二叉树先序遍历:', end='') preorder_traversal(root) print() # 获取二叉树的镜像 mirror_root = mirror_binary_tree(root) # 输出镜像二叉树先序遍历 print('镜像二叉树先序遍历:', end='') preorder_traversal(mirror_root) print()
运行结果:
原二叉树先序遍历:pidancode.com is Python programming awesome language ! 镜像二叉树先序遍历:pidancode.com awesome language ! is programming Python
相关文章