JZ18 二叉树的镜像

这篇博客探讨了如何将一个二叉树转换为其镜像,并分析了源二叉树和镜像二叉树的遍历顺序之间的关系。通过前序、中序和后序遍历的对比,发现它们的反向对应性。文中提供了两种简洁的Python实现,通过递归方式完成二叉树的镜像变换,遵循类似后序遍历的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

操作给定的二叉树,将其变换为源二叉树的镜像。

比如:    源二叉树 
            8
           /  \
          6   10
         / \  / \
        5  7 9 11
        镜像二叉树
            8
           /  \
          10   6
         / \  / \
        11 9 7  5

不确定两者有什么关系,先试着把他们的三种遍历顺序写出来。

源二叉树:

①前序:8 6 5 7 10 9 11

②中序:5 6 7 8 9 10 11

③后序:5 7 6 9 11 10 8

镜像二叉树:

①前序:8 10 11 9 6 7 5

②中序:11 10 9 8 7 6 5

③后序:11 9 10 7 5 6 8

这样看下来的话,源二叉树的前序反过来是镜像二叉树的后序,源二叉树的中序反过来是镜像二叉树的中序,源二叉树的后序反过来是镜像二叉树的前序。

之前的第4题根据前序和后序重建二叉树,那么用源二叉树的后序反过来加上源二叉树的中序反过来,就能重建除镜像二叉树。

看看讨论组的方法是什么?厉害,代码都好短!

class Solution:
     
    def Mirror(self , pRoot ):
        if pRoot:
            right = self.Mirror(pRoot.left)
            left = self.Mirror(pRoot.right)
            pRoot.right = right
            pRoot.left = left
            return pRoot
class Solution:
    def Mirror(self, pRoot):
        if not pRoot:
            return None
        l, r = pRoot.left, pRoot.right
        pRoot.left = self.Mirror(r)
        pRoot.right = self.Mirror(l)
        return pRoot

思路是先遍历左子树,交换左右孩子,然后遍历右子树,交换左右孩子,类似于后序遍历。


     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值