📜  从给定的二叉树创建镜像树(1)

📅  最后修改于: 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 

可以看出,原始二叉树和镜像二叉树是左右对称的。