JZ18 二叉树的镜像

描述

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

比如:    源二叉树 
            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

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


     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值