题目地址

https://leetcode-cn.com/problems/invert-binary-tree/

思路

递归法

写递归算法的时候,要想一想是采用前中后序哪种遍历方式

我们先看看递归算法,对于二叉树的递归方式有三种前中后序,先来看看前序遍历。

递归三部曲:

  1. 确定递归函数的参数和返回值

参数就是要传入节点的指针,不需要其他参数了,返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就返回一个指针。

TreeNode* invertTree(TreeNode* root)
  1. 确定终止条件

当前节点为空的时候,就返回

if (root == NULL) return root;
  1. 确定单层递归的逻辑

因为是先序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。

swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);

基于这递归三步法,代码基本写完,C++代码如下:

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;}
};

迭代法

leetcode-master 中给出了 前中后序迭代法统一的模板,使用前序遍历,只需要改动一行就可以了,代码在下面已经给出。

C++代码

递归(前序遍历)

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;}
};

迭代法(前序遍历)

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == NULL) return root;stack<TreeNode*> st;st.push(root);while(!st.empty()) {TreeNode* node = st.top();st.pop();swap(node->left, node->right);if(node->left) st.push(node->left);if(node->right) st.push(node->right);}return root;}
};

迭代法(前序遍历)(模板)

模板地址:leetcode-master

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> st;if (root != NULL) st.push(root);while (!st.empty()) {TreeNode* node = st.top();if (node != NULL) {st.pop();if (node->right) st.push(node->right);  // 添加右节点if (node->left) st.push(node->left);    // 添加左节点st.push(node);                          // 添加中节点st.push(NULL);} else {st.pop();node = st.top();st.pop();swap(node->left, node->right);          // 节点处理逻辑}}return root;}
};

我是程序员Carl,先后在腾讯和百度从事技术研发多年,利用工作之余重刷leetcode,更多精彩文章尽在公众号:代码随想录,关注后,回复「Java」「C++」「python」「简历模板」等等,有我整理多年的学习资料,本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图看一看一定会有所收获!

「leetcode」C++题解:226.翻转二叉树,递归法与迭代法详解相关推荐

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

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

  2. 【LeetCode】【HOT】226. 翻转二叉树(递归)

    [LeetCode][HOT]226. 翻转二叉树 文章目录 [LeetCode][HOT]226. 翻转二叉树 package hot;import java.util.ArrayDeque; im ...

  3. LeetCode:226. 翻转二叉树

    226. 翻转二叉树 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 用递归的方法将二叉树的左右节点互换,核心思想就是交换 源码: struct TreeNode* invertTree(s ...

  4. Java实现 LeetCode 226 翻转二叉树

    226. 翻转二叉树 翻转一棵二叉树. 示例: 输入: 4/ \2 7/ \ / \ 1 3 6 9 输出: 4/ \7 2/ \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell ...

  5. 代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树

    递归三部曲 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 102. 二叉树的层序遍历 题解及想法 解法一 :递归法 class Solution {public List<Lis ...

  6. 226. 翻转二叉树【58】

    难度等级:容易 上一篇算法: 543. 二叉树的直径[71] 力扣此题地址: 226. 翻转二叉树 - 力扣(Leetcode) 1.题目:226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻 ...

  7. 代码随想录算法训练营第十五天| 102层序遍历、226.翻转二叉树、101. 对称二叉树

    层序遍历 参考文章:代码随想录 解题思路: 层序遍历一个二叉树.就是从左到右一层一层的去遍历二叉树.这种遍历的方式和我们之前讲过的都不太一样. 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合 ...

  8. 代码随想录【day 14 二叉树】| 层序遍历 226.翻转二叉树 101.对称二叉树

    代码随想录[day 14 二叉树]| 层序遍历 226.翻转二叉树 101.对称二叉树 层序遍历 卡哥文解 视频讲解 题目链接:102.二叉树的层序遍历 解题思路 代码实现 题目链接:107.二叉树的 ...

  9. 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

  10. 代码随想录算法训练营day15 | 102. 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

    102. 二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {de ...

最新文章

  1. linux修改rc.local权限,Linux 7 的 rc.local 文件需要 添加 +x 权限才会自动执行
  2. javaweb:session
  3. 对话V神:权益证明POS新趋势
  4. 案例十:输入一批整数,输出其中的最大值和最小值,输入数字0时结束循环。...
  5. grub shell 错误_使用grub-install修复Grub时出错
  6. SpringBoot:ApplicationEvent与ApplicationListener
  7. java 判断字符串是否汉子_java判断 字符串 是否有汉字
  8. UVA11774 Doom‘s Day【数学规律+GCD】
  9. hbase 性能优化
  10. Java程序开发的基本流程是什么样的?
  11. 《模拟电子技术》-童诗白
  12. 开关电源PFC电路原理详解及matlab仿真
  13. 阿里云企业做网站备案流程
  14. 云计算与大数据——云计算的特点
  15. 基于SpringBoot的网上电影票购买系统设计与实现
  16. 危机管理应遵循哪些原则?
  17. KVM 自定义存储与磁盘挂载
  18. 企业数据中心“云化”转型解决方案
  19. 贫民窟里的chengren童话
  20. 用AI技术分析情商 川普和克林顿谁更胜一筹?

热门文章

  1. codevs——T1048 石子归并
  2. SAE实践——用SVN命令行同步/提交代码
  3. ffffffffffffffffff
  4. 本质矩阵 基础矩阵 单应矩阵 (1)
  5. Angular之constructor和ngOnInit差异及适用场景
  6. 创建Docker私有仓库
  7. fjnuoj 1004 游戏 (博弈论)
  8. bzoj4008: [HNOI2015]亚瑟王
  9. ubuntu 下 升级 nginx
  10. gridview選發行彈出層 模板列