题意

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

力扣

法1—递归

二叉树镜像定义: 对于二叉树中任意节点 root ,设其左 / 右子节点分别为 left, right;则在二叉树的镜像中的对应 root 节点,其左 / 右子节点分别为 right, left 。


根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。

递归解析:

  1. 终止条件: 当节点 root 为空时(即越过叶节点),则返回 null;
  2. 递推工作:
    1. 开启 递归右子节点(mirrorTree(root->right),其返回值存入 变量LeftRoot中;

    2. 开启 递归左子节点(mirrorTree(root->left),其返回值存入 变量RightRoot中;
    3. 使其root的左节点为LeftRoot,右节点为RightRoot。
  3. 返回值: 返回当前节点 root ;

c++实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution
{
public:TreeNode* mirrorTree(TreeNode* root) {if(nullptr==root)return nullptr;TreeNode* LeftRoot = mirrorTree(root->right);TreeNode* RightRoot = mirrorTree(root->left);root->left=LeftRoot;root->right=RightRoot;return root;}
};

法2—利用栈遍历二叉树,交换每个节点的左右子节点

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution
{
public:TreeNode* mirrorTree(TreeNode* root) {if(nullptr==root)return nullptr;stack<TreeNode*> st;st.push(root);while(!st.empty()){TreeNode* node = st.top();st.pop();if(node->right)st.push(node->right);if(node->left)st.push(node->left);TreeNode* temp = node->left;node->left=node->right;node->right=temp;}return root;}
};

剑指Offer 27—二叉树的镜像相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  2. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  3. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

  4. JZ27 [剑指 Offer 27] 二叉树的镜像

    二叉树的镜像 Category Difficulty Likes Dislikes lcof Easy (79.61%) 311 - 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: ...

  5. 【Java】 剑指offer(27) 二叉树的镜像

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 画图可 ...

  6. 剑指offer 27. 二叉树的镜像

    声明:本系列博客是对何海涛<剑指offer>的关键点总结. 1.树的镜像 定义:树的根结点相同,但是左右两个子节点交换了位置 2.解题思路 1)前序遍历树的每一个结点: 2)如果遍历到的节 ...

  7. 剑指offer——27.二叉树的镜像

    题目: 操作给定的二叉树,将其变换为源二叉树的镜像. 知识点: 无 注意: 无 代码实现: 遍历所有节点,交换当前节点的左右子节点,递归至叶子节点 /*二叉树镜像*/ void mirror(Bina ...

  8. 剑指 Offer 27. 二叉树的镜像【无取巧解法,易于理解!】

    看题解时,很多大牛用很少的代码就完成了AC,但可能看了很多遍也看不懂,因此萌生了写一种最"笨"最完整的代码的想法,这样大家可以通过我的代码入门,看懂了再去挑战大牛们的简洁解法. 请 ...

  9. 剑指offer 27 二叉树的镜像

    请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / 1 3 6 9 镜像输出: 4 / 7 2 / \ / 9 6 3 1 示例 1: 输入:root = [ ...

最新文章

  1. Serlvet学习笔记之四—对文件的操作
  2. 程序界面把程序员这条路走下去
  3. IOS开发笔记5-C语言基础复习
  4. python3 issubset 判断列表子集
  5. 2015 DevOps状态调查报告
  6. ANTLR和Jetbrains MPS:解析文件并以树符号显示AST
  7. 算法岗百里挑一热爆了,全球AI大厂薪酬大起底
  8. oracle ogg checkpoint,OGG 11g Checkpoint 详解
  9. MongoDB需要慎用local、admin数据库
  10. RHCE 学习笔记(5)- 本地用户和组的管理
  11. 典型相关分析(CCA)及其python实现
  12. 5分钟搞定!java免费源码网站
  13. html数值计算计算
  14. Cache tier使用文档
  15. win10中linux文件夹重命名,Win10家庭版重命名Administrator用户文件夹
  16. 产品文档 | PRD写作手册
  17. 【转载】Saas模式
  18. 30岁开始实现我的程序员梦
  19. 华三模拟器:路由备份路由聚合
  20. httpwebrequest下载文件失败的解决方案

热门文章

  1. C/C++程序员工作面试的秘密
  2. 真·电子二胡 (ESP32配合库乐队APP实现的电子制作)
  3. 【概率论基础进阶】随机事件和概率-古典概型与伯努利概型
  4. docker安装了nacos,浏览器却无法访问到页面
  5. app.run 相关参数 flask配置文件
  6. IN4007和IN4148的作用
  7. python1到100奇数相加_如何使用while语句求1到100的奇数和
  8. 第十二周项目5-迷宫问题之图深度优先遍历解法
  9. 记录卸载h5py出现的问题
  10. 拉了300M的网,下载速度为啥还是这么慢?计算机基础(五)之网络层完结