声明:本系列博客是对何海涛《剑指offer》的关键点总结。

1.树的镜像

定义:树的根结点相同,但是左右两个子节点交换了位置

2.解题思路

1)前序遍历树的每一个结点;

2)如果遍历到的节点有子节点,则交换其左右两个子节点;

3)分别以左子节点和右子节点作为新的根结点,递归调用该函数;

4)当遍历到的结点为叶子结点时,即其左、右子结点都为空,函数返回;

3.代码实现

3.1 递归实现
//二叉树定义
struct BinaryTreeNode{int value;BinaryTreeNode* pLeft;BinaryTreeNode* pRight;
};void MirrorTreeRecursively(BinaryTreeNode *pNode){if (pNode == nullptr)return;//函数返回的条件,遇到叶子结点if (pNode->pLeft == nullptr && pNode->pLeft == nullptr)return;//交换左右结点BinaryTreeNode* pTmp = pNode->pLeft;pNode->pLeft = pNode->pRight;pNode->pRight = pTmp;if (pNode->pLeft != nullptr)MirrorTreeRecursively(pNode->pLeft);if (pNode->pRight != nullptr)MirrorTreeRecursively(pNode->pRight);
}
3.2 非递归实现
//二叉树定义
struct BinaryTreeNode{int value;BinaryTreeNode* pLeft;BinaryTreeNode* pRight;
};void MirrorTree(BinaryTreeNode *pNode){if (pNode == nullptr)return;stack<BinaryTreeNode*> mStack;BinaryTreeNode* pTopStack = nullptr;//存放栈顶元素BinaryTreeNode* pTmp = nullptr;//辅助交换mStack.push(pNode);while (!mStack.empty()){//根结点出栈pTopStack = mStack.top();mStack.pop();if (pTopStack->pLeft == nullptr || pTopStack->pLeft == nullptr){pTmp = pTopStack->pLeft;pTopStack->pLeft = pTopStack->pRight;pTopStack->pRight = pTmp;}//根结点的左右孩子入栈if (pTopStack->pLeft != nullptr)mStack.push(pTopStack->pLeft);if (pTopStack->pRight != nullptr)mStack.push(pTopStack->pRight);}
}

剑指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.二叉树的镜像

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

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

    题意 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 力扣 法1-递归 二叉树镜像定义: 对于二叉树中任意节点 root ,设其左 / 右子节点分别为 left, right:则在二叉树的镜像中 ...

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

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

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

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

最新文章

  1. 评论:苹果APP STORE面临失贞可能?
  2. 几款高压、高阻电阻测试
  3. android之 实现对搜索框输入内容(自动出现匹配内容)
  4. 【推荐系统】五个工业风满满的 Look-alike 算法
  5. 何杰月c语言课程,多线程 - 何杰leo的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. BCrypt加密怎么存入数据库_第6天 密码加密与微服务鉴权JWT(下)
  7. java警惕自增的陷阱
  8. flowable实战(七)flowable核心数据库表清单
  9. Python数模笔记-Sklearn(2)聚类分析
  10. .NET的RedisProvider
  11. python基本语言元素是_Python-基本语法元素
  12. Lua笔记3 函数和数组
  13. C++值传递、指针传递、引用传递的区别
  14. mysql double 和Oracle,oraclemysql对比
  15. Visio画图:用Visio画流程图(初级)
  16. 编译错误:找不到工程或库
  17. zkServer.cmd报错invalid config exiting abnormally解决
  18. 从零开发一款笔记APP——神马笔记WhatsNote
  19. string::assign
  20. 信号系统中使用的继电器

热门文章

  1. 宁愿离职,也不要待在这样的公司、做这样的工作!
  2. JimuReport积木报表(SQLserver)主子表关联查询
  3. 苹果cmsV10采集插件一键配置定时任务采集
  4. hadoop直接解压hdfs中的zip文件
  5. k8S中的MySQL如何扩容_Kubernetes 中进行 PVC 的扩容 互联网技术圈 互联网技术圈
  6. 抑郁症的第十年:我终于跟自己和解
  7. Spring和SpringBoot中针对单一接口多种实现的支持
  8. Chained Exceptions in Java
  9. 自动驾驶步入运营阶段,腾讯给出“车图云”的新解法
  10. 数据结构与算法(陈越版)第五讲 (树下)树的应用——集合及其运算