📜  数据结构|二叉树|问题6(1)

📅  最后修改于: 2023-12-03 15:26:09.396000             🧑  作者: Mango

数据结构 | 二叉树 | 问题6

问题描述

给定一棵二叉树,求其镜像二叉树。镜像二叉树定义为:对于任意一棵二叉树,交换其左右子树所形成的二叉树即为其镜像二叉树。

例如,对于以下二叉树:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

其镜像二叉树为:

     4
   /   \
  7     2
 / \   / \
9   6 3   1
解法

可以使用递归的方式来解决这个问题。具体来说,可以先交换当前根节点的左右子树,然后递归交换左右子树的左右子树,直到到达叶子节点为止。

代码如下:

def mirror(root):
    if root is None:
        return None
        
    # 交换左右子树
    temp = root.left
    root.left = root.right
    root.right = temp
    
    # 递归交换左右子树的左右子树
    mirror(root.left)
    mirror(root.right)
    
    return root
测试

为了测试上述代码的正确性,可以使用以下测试用例:

# 构造一个二叉树
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
root = TreeNode(4)
root.left = TreeNode(2)
root.right = TreeNode(7)
root.left.left = TreeNode(1)
root.left.right = TreeNode(3)
root.right.left = TreeNode(6)
root.right.right = TreeNode(9)

# 执行镜像操作
mirror(root)

# 输出镜像后的二叉树
print(root.left.val)    # 输出:7
print(root.right.val)   # 输出:2
print(root.left.left.val)  # 输出:9
print(root.left.right.val) # 输出:6
print(root.right.left.val) # 输出:3
print(root.right.right.val)    # 输出:1

可以看到,经过镜像操作后,原二叉树被修改为其镜像二叉树,并且输出符合预期。