[剑指offer] 27. 二叉树的镜像

题目

在这里插入图片描述

思路

递归 或者 栈。 递归就是左右子树的解构成了二叉树的解。栈就是由根节点开始,遍历各节点,执行交换操作。
注意,
因为root.left=mirror(root.right)已经把root.left改变了,所以如果是分步实现左右子树的镜像交换,则需要在被改之前先把root.left存起来,后面调用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 简化版
class Solution:
    def mirrorTree(self, root: TreeNode) -> TreeNode:
        if not root: 
        	return None  ####  终止条件
        root.left, root.right = self.mirrorTree(root.right), self.mirrorTree(root.left)
        return root

### 辅助变量版
class Solution:
    def mirrorTree(self, root: TreeNode) -> TreeNode:
        if not root: 
        	return None  ####  终止条件
        tmp = root.left
        root.left = self.mirrorTree(root.right)
        root.right = self.mirrorTree(tmp)
        return root

在这里插入图片描述
在这里插入图片描述

class Solution:
    def mirrorTree(self, root: TreeNode) -> TreeNode:
        if not root: return
        stack = [root]
        while stack:
            node = stack.pop()
            if node:         ### 终止条件
            	stack.append(node.left)    
            	stack.append(node.right)
            	node.left, node.right = node.right, node.left
        return root

######## 实测 先交换再append 效率更高:
class Solution:
    def invertTree(self, root):
        stack = [root]
        while stack:
            node = stack.pop()
            if node:
                node.left, node.right = node.right, node.left
                stack.append(node.right)
                stack.append(node.left)
        return root

来源:力扣(LeetCode)
参考链接:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值