📅  最后修改于: 2023-12-03 15:26:09.396000             🧑  作者: Mango
给定一棵二叉树,求其镜像二叉树。镜像二叉树定义为:对于任意一棵二叉树,交换其左右子树所形成的二叉树即为其镜像二叉树。
例如,对于以下二叉树:
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
可以看到,经过镜像操作后,原二叉树被修改为其镜像二叉树,并且输出符合预期。