【如题】

对一棵二叉树进行反转,即各个节点的左右子树进行反转。

【方法一】非递归

层序遍历:每遍历一个结点,对其左右结点进行交换。

交换根结点的左右子树;

交换第二层结点的左右子树

。。。。。。。

TreeNode* inverse(TreeNode* root){if(root==NULL)return NULL;queue<TreeNode*> que;que.push(root);while(!que.empty()){TreeNode* pNode = que.front();que.pop();//比层序遍历多的地方TreeNode* pLeft = pNode->left;pNode->left = pNode->rigth;pNode->right = pLeft;if(pNode->left != NULL)que.push(pNode->left);if(pNode->rigth != NULL)que.push(pNode->right);}return root;
}

【方法二】递归法

步骤:

交换根结点的左右子树

递归调用方法,对左右子树分别调用

TreeNode* inverse(TreeNode* root){if(root==NULL)return NULL;TreeNode* pNode = root->left;root->left = inverse(root->right);root->right = inverse(pNode);return root;
}

【补充】二叉树的层序遍历

void inverse(TreeNode* root){if(root==NULL)return;queue<TreeNode*> que;que.push(root);while(!que.empty()){TreeNode *pNode = que.front();//取得队列首元素que.pop();//队列首元素出队printf("%c ",pNode->val);//判断左右子树是否为空,进行遍历if(pNode->left != NULL)que.push(pNode->left);if(que->right != NULL)que.push(pNode->right);}}

反转二叉树--递归和非递归相关推荐

  1. java 反转二叉树 非递归_【刷算法】翻转二叉树的递归和非递归解法

    题目描述 操作给定的二叉树,将其变翻转为源二叉树的镜像. 输入描述: 1 1 / \ / \ 2 3 ------> 3 2 / \ / \ / \ / \ 4 5 6 7 7 6 5 4 解题 ...

  2. 二叉树的遍历(递归,非递归,Morris)

    二叉树的遍历 目录 递归遍历 非递归遍历 Morris遍历 1. 递归遍历 递归版遍历只要当前节点不为null,就可以三次回到当前节点. public static void preOrderRecu ...

  3. 【二叉树的遍历-3】后序遍历(递归与非递归)

    [二叉树的遍历-1]前序遍历(递归与非递归) [二叉树的遍历-2]中序遍历(递归与非递归) [二叉树的遍历-4]层序遍历(递归与非递归) 后序遍历 后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历 ...

  4. 二叉树 2.0 -- 非递归遍历

    二叉树递归遍历存在的问题 如果我们的二叉树只有左子树,而且树的高度还很深的时候,这个时候递归调用遍历的时候,栈帧空间开辟的较大,很可能造成栈溢出.但是我们一个程序中,为堆分配的空间要比栈大的多,这个时 ...

  5. 对于二叉树三种非递归遍历方式的理解

    利用栈实现二叉树的先序,中序,后序遍历的非递归操作 栈是一种先进后出的数据结构,其本质应是记录作用,支撑回溯(即按原路线返回):因此,基于其的二叉树遍历操作深刻的体现了其特性: 若后续的输入和其前面的 ...

  6. 二叉树的几种递归和非递归式遍历:

    二叉树的几种递归和非递归式遍历: 1 #include <fstream> 2 #include <iostream> 3 4 using namespace std; 5 6 ...

  7. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历(java实现)

    分别用递归和非递归方式实现二叉树先序.中序和后序遍历 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点.我们约定:先序遍历顺序 为根.左.右;中序遍历顺序为左.根.右;后序遍历顺序为左 ...

  8. 树与二叉树的深度优先与广度优先算法(递归与非递归)

    本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树   和  各种基本算法实现小结( ...

  9. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  10. 九十五、二叉树的递归和非递归的遍历算法模板

    @Author:Runsen 刷Leetcode,需要知道一定的算法模板,本次先总结下二叉树的递归和非递归的遍历算法模板. 二叉树的四种遍历方式,前中后加上层序遍历.对于二叉树的前中后层序遍历,每种遍 ...

最新文章

  1. 用createrepo配置Yum本地源
  2. 清华唐杰:GPT-3表示能力已经接近人类了,但它有一个阿喀琉斯之踵
  3. 在线网上打字系统_在线网上打字比赛软件_打字练习_中英文打字系统
  4. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 FFmpegAndroid 框架 )
  5. Oracle中的存储过程简单例子
  6. 华为融合电信云解决方案包括_运营商这“一朵云”怎么建?使能者华为的解决之道...
  7. 如何在Xbox One或PlayStation 4上为Skyrim特别版安装Mods
  8. SpringCloud工作笔记071---mysql字符集 utf8 和utf8mb4 的区别_utf8是不能存储emoji表情字符集的
  9. hive 如何将数组转成字符串_Hive函数大全(含例子)之字符串函数(String Functions)...
  10. 【51项目】电子密码锁设计
  11. Fedora Linux基本配置
  12. sql2008 评估期过期解决办法
  13. Kotlin — 介绍各类异步程序设计
  14. 音频传输中的I2S协议
  15. python输出闰年_python写闰年
  16. 一鸣心所向:想成功?变身蝙蝠侠吧
  17. Mac 运行windows软件
  18. 《Dreamweaver CS6 完全自学教程》笔记 第十四章:使用 CSS 设计网页
  19. outlook安全模式修复_Outlook Com安全漏洞Microsoft无法修复
  20. Kubernetes Events介绍(下)

热门文章

  1. 通过枚举法暴力破解6位数以内zip密码压缩包,使用pyzipper包:内嵌生成1-6位数字加密码所有组合函数
  2. springMVC Controller层接收 JSON参数遇到得问题
  3. html与css编程证书,利用CSS布局做一个简单的荣誉证书(代码示例)
  4. networkx画图
  5. matlab 提取极值,利用matlab 进行极值统计的一个例子——gev 方法.pdf
  6. Android 贪食蛇
  7. cas4.0实现多种方式邮箱/手机号码登录及认证
  8. POI获取单元格颜色与设置单元格颜色
  9. 例题6-21 uva506 System Dependencies 模拟
  10. 我们来了!多云架构时代,欢迎加入中国开源网络新势力