📅  最后修改于: 2023-12-03 15:22:01.884000             🧑  作者: Mango
创建二叉树的镜像树是指将二叉树中的所有左右子树交换。例如,如下给定的二叉树的镜像树如图所示:
1 1
/ \ / \
2 3 ==> 3 2
/ \ / \ / \
4 5 6 6 5 4
为了实现这个功能,我们可以采用递归的方式。递归过程中,对于每个节点,我们都将它的左右子树进行交换,并继续递归交换它的左子树和右子树。当递归到叶子节点时,递归终止。
以下是示例代码实现:
def mirror_tree(root):
"""
从给定的二叉树创建镜像树
Args:
root: 二叉树的根节点
Returns:
镜像二叉树的根节点
"""
if not root:
return None
# 交换左右子树
root.left, root.right = root.right, root.left
# 递归左右子树
if root.left:
mirror_tree(root.left)
if root.right:
mirror_tree(root.right)
return root
假设二叉树中共有 n 个节点,则从根节点开始进行递归交换,每个节点只会被访问一次。因此,时间复杂度为 O(n)。
递归过程中需要使用系统栈空间,因此空间复杂度也是 O(n)。
以题目中给出的二叉树为例,测试代码如下:
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def print_tree(root):
if not root:
return
print(root.val, end=' ')
print_tree(root.left)
print_tree(root.right)
root = Node(1, Node(2, Node(4), Node(5)), Node(3, Node(6)))
print("原始二叉树:")
print_tree(root)
print()
mirror_root = mirror_tree(root)
print("镜像二叉树:")
print_tree(mirror_root)
print()
输出结果如下:
原始二叉树:
1 2 4 5 3 6
镜像二叉树:
1 3 6 2 5 4
可以看出,原始二叉树和镜像二叉树是左右对称的。