一、二叉树翻转理论

想要翻转二叉树,要进行以下两个步骤:

  • 遍历二叉树每一个节点
  • 翻转每一个节点的左右孩子节点,没有左右孩子节点的可以视作其左右孩子节点为nullptr

二、二叉树翻转代码

  1. 翻转二叉树

1、前序遍历翻转二叉树

class Solution {public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;swap(root->left, root->right);  // 中invertTree(root->left);         // 左invertTree(root->right);        // 右return root;}
};

2、后序遍历翻转二叉树

class Solution {public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;invertTree(root->left);         // 左invertTree(root->right);        // 右swap(root->left, root->right);  // 中return root;}
};

3、中序遍历翻转二叉树

注意,先翻转了left,然后翻转了root,此时没有翻转的right变成了left,因此中序遍历需要特别注意在交换了root后,right是原来的left,left是原来的right。

class Solution {public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;invertTree(root->left);         // 左swap(root->left, root->right);  // 中invertTree(root->left);        // 右   注意这里的left是原来的右return root;}
};
class Solution {public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;invertTree(root->right);         // 左swap(root->left, root->right);  // 中invertTree(root->right);        // 右  注意这里的是right是原来的左return root;}
};

4、层次遍历翻转二叉树

将层次遍历时将二叉树节点值存入结果的操作变成翻转左右孩子节点的操作即可。

class Solution {public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> st;if(root != nullptr){st.push(root);while(!st.empty()){TreeNode* node = st.top();if(node != nullptr){st.pop();if(node->right) st.push(node->right);if(node->left) st.push(node->left);st.push(node);st.push(nullptr);} else {st.pop();node = st.top();st.pop();//和层次翻转二叉树相比,只是改变了对排好的节点的处理办法swap(node->left, node->right);}}}return root;}
};

二叉树(四)、反转二叉树相关推荐

  1. 算法-二叉树:反转二叉树

    算法-二叉树:反转二叉树 思路解析:只要把每个节点的左右孩子反转一下就可以了,注意不要采用中序遍历,因为可能会把某些节点的左右孩子反转两次.以下方法采用前序遍历,方法一采用递归,方法二采用迭代. // ...

  2. 反转二叉树 java_反转二叉树【Java】

    packagecom.example.demo.tree;importcom.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;importor ...

  3. 让HomeBrew作者面试谷歌翻车的经典算法题 反转二叉树 Node.js 版

    var invertTree = function(root) {if(root === null){return root}let tmpLeft = root.left;root.left = r ...

  4. 二叉树常见算法题(单值二叉树、二叉树的最大深度、反转二叉树、判断两颗二叉树是否相同、对称二叉树、一颗二叉树是否是另一颗二叉树的子树)

    这里的代码都是递归实现的,再强调下二叉树的概念,二叉树的构成有两种情况: 1.空树 2.根节点 + 左子树 + 右子树(这里的左子树和右子树又是一颗二叉树) 可以看出二叉树就是递归定义的,下面的算法题 ...

  5. 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)

    目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...

  6. leetCode题解之反转二叉树

    1.题目描述 经典的反转二叉树,就是将二叉树中每个节点的左.右儿子交换. 2.题目分析 3.代码 1 TreeNode* invertTree(TreeNode* root) { 2 3 if(roo ...

  7. PAT甲级1102 Invert a Binary Tree:[C++题解]反转二叉树、递归

    文章目录 题目分析 题目链接 题目分析 反转二叉树这道题目特别出名!!!,是因为Homebrew这款Mac上大火的软件的作者到google面试,就考了这道题.面试官说了下面这段话:你竟然连在白板上翻转 ...

  8. 数据结构与算法笔记(十四)—— 二叉树

    一.二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree) 和"右子树"(right subtree). ...

  9. [LeetCode][JavaScript]Invert Binary Tree 反转二叉树

    反转二叉树 其实我从没有想到前端面试会问到这个问题,题目来源于google的面试 Google: 90% of our engineers use the software you wrote (Ho ...

  10. C语言反转二叉树的递归和迭代解决方案(附完整源码)

    C语言反转二叉树的递归和迭代解决方案 C语言反转二叉树的递归和迭代解决方案完整源码(定义,实现,main函数测试) C语言反转二叉树的递归和迭代解决方案完整源码(定义,实现,main函数测试) #in ...

最新文章

  1. .data和.text段合并
  2. CVPR2021:推广到开放世界的在线自适应深度视觉里程计
  3. java集合框架史上最详解(list set 以及map)
  4. android筛选cookie,服务器无法从Android手机识别Cookie
  5. JFinal配合Shiro权限控制在FreeMarker模板引擎中控制到按钮粒度的使用
  6. 2020 我的C++学习之路 C++PrimerPlus第四章课后习题
  7. Oracle GoldenGate 详解
  8. 【TensorFlow】TensorFlow函数精讲之value()
  9. 设计模式全解析 23种
  10. 160508Junit使用
  11. 二进制,八进制,十六进制,十进制之间的换算
  12. python给一个不多于5位的正整数 要求_python作业题2 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。...
  13. 【Golang】家庭收支记账软件
  14. 蓄电池浮充电和均充电
  15. cuBLAS使用(4)
  16. JavaScript replace之字符串的方法与indexOf的用法 详解
  17. Linux exec函数的使用
  18. 网络检测--命令检测网络
  19. vue项目 使用svg渲染地图 并添加点击事件,动态改变背景颜色
  20. Android 12.0关机界面全屏显示(UI全屏显示)

热门文章

  1. 脱离spring cloud使用feign
  2. 量化投资-基本面组合-10大基本面策略的简单组合
  3. 上网必备!这些网站绝对是互联网宝藏!带你进入全新的在线世界
  4. 运营的笔试中相关基础知识概念
  5. java switch table_关于java:JVM的LookupSwitch和TableSwitch之间的区别?
  6. 使用govendor管理Golang项目依赖
  7. 怀旧软件_50多个最佳复古怀旧Photoshop教程
  8. std::string::npos 常量解析
  9. 【k8s】修改docker的docker.service并重启docker服务
  10. 红帽系统RHEL7 安装cuda10.2及对应的cudnn7.6.5