前言

今天我们来总结二叉树的前中后序以及层次遍历的递归非递归的写法。我们都知道二叉树遍历的递归写法很简单,但是面试的时候面试官往往考察的不是我们递归的写法,他们满怀期待你写出非递归的解法,而当你只会写递归方法时,offer已经与你渐行渐远了。

下面先一起来看一下二叉树各种遍历的顺序:

前序遍历:根结点 —> 左子树 —> 右子树(先遍历根节点,然后左右)
这棵树的前序遍历为:ABDEGHCF

中序遍历:左子树—> 根结点 —> 右子树(在中间遍历根节点)
这棵树的中序遍历为:DBGEHACF

后序遍历:左子树 —> 右子树 —> 根结点(最后遍历根节点)
这棵树的后序遍历为:DGHEBFCA

层次遍历:按层次遍历
这棵树的层次遍历为:ABCDEFGH

ps: 所谓的前序、中序、后续,就是对根节点而言的,左右的遍历顺序不变,前序就是根节点最先遍历,然后左右;中序就是把根节点放在中间遍历;后序则是把根节点放在最后遍历。

https://blog.csdn.net/qq_42651904/article/details/90288715

文章目录

  • 前言
  • 一、前序遍历
    • 1.递归解法
    • 2.非递归方法(栈)
  • 二、中序遍历
    • 1.递归解法
    • 2.非递归方法(栈)
  • 三、后序遍历
    • 1.递归解法
    • 2.非递归方法(栈)
  • 四、层次遍历
    • 1.非递归解法(队列)
  • 总结

一、前序遍历

1.递归解法

代码如下:

class 

2.非递归方法(栈)

前序遍历是中左右,每次先处理的是中间节点,先将跟节点放入栈中,然后将右孩子加入栈,再加入左孩子。(因为栈的特性是先入后出,所以要先加入右孩子,再加入左孩子)

代码如下:

class 

二、中序遍历

1.递归解法

代码如下:

class 

2.非递归方法(栈)

中序遍历是左中右,每次先从根节点开始,一直遍历左子节点,并在遍历过程中将其入栈,然后取出栈顶元素,再指向右孩子。

代码如下:

class 

三、后序遍历

1.递归解法

代码如下:

class 

2.非递归方法(栈)

后序遍历是左右中,而先序遍历是中左右,那么我们只需要调整一下先序遍历的代码顺序(栈内先入左孩子,再入右孩子:这样出栈为“右左中”),最后反转res数组(得到“左中右”)。

代码如下:

class 

四、层次遍历

1.非递归解法(队列)

层次遍历算法思想:
用一个队列保存被访问的当前节点的左右孩子以实现层次遍历。
在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:

  1. 访问该元素所指向的节点
  2. 若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束

代码如下

class 

总结

以上就是二叉树前中后以及层次遍历的递归与非递归写法了,喜欢的就点个赞同和关注吧!!!

创建的二叉树后续非递归遍历结果为_一入递归深似海,从此offer是路人相关推荐

  1. 6-4 二叉树的非递归遍历 (25分)_本周小结!(二叉树)

    给「代码随想录」一个星标吧! ❝ 以后每周加上一个本周小结怎么样? ❞ 本周小结 发现大家周末的时候貌似都不在学习状态,周末的文章浏览量和打卡情况照工作日差很多呀,可能是本周日是工作日了,周六得好好放 ...

  2. SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列

    SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二 ...

  3. #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序

    输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序列 ***层次遍历思路: 1.初始化一个队列 2.把根节点指针入队 3.队列非空时:出队列取得一个结点指针,访问该节点,若该节点的左 ...

  4. step3 . day7数据结构之二叉顺序数的创建和二叉树的栈形式遍历

    1.最近从网易云课堂学习了一个老师的数据结构相关的知识,了解到数据结构的应用和二分查找之间的关系,就自己想着写一个创建二叉顺序数和利用栈对二叉顺序树进行顺序输出的代码,终于一个周末的时间写完了. 2. ...

  5. SWUST OJ 978: 输出利用先序遍历创建的二叉树的中序遍历序列

    题目描述 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建 ...

  6. 一入递归深似海:二叉树基础

    图片选自代码随想录-二叉树理论基础 二叉树的种类 题目中二叉树主要有两种形式:满二叉树和完全二叉树 满二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵 ...

  7. 写二叉树程序时为什么总是报运行时错误_二叉树:一入递归深似海,从此offer是路人...

    给「代码随想录」一个星标吧! ❝ 一看就会,一写就废! ❞ 这次我们要好好谈一谈递归,为什么很多同学看递归算法都是"一看就会,一写就废". 主要是对递归不成体系,没有方法论,「每次 ...

  8. 数据结构之SWUSTOJ978: 输出利用先序遍历创建的二叉树的中序遍历序列 and SWUSTOJ979: 输出利用先序遍历创建的二叉树的后序遍历序列

    题目: 代码: #include<iostream> using namespace std; typedef struct Binarynode {char data;struct Bi ...

  9. 二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会

    前记 上周我投递出了简历,岗位是后端开发工程师.这周腾讯面试官给我进行了视频面试.面试过程中他问了二叉树的问题. 二叉树相关算法题,在面试中出现的次数非常非常多,所以我面试之前也有所准备.今天结合面试 ...

最新文章

  1. 用python画xy散点图-python使用Plotly绘图工具绘制散点图、线形图
  2. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.2. Torvalds的Linux发展)
  3. appcompat_v7 引起的新建Android工程编译不过的问题 (转载)
  4. 1276: 求和游戏
  5. SAP UI5 jQuery.sap.setObject
  6. IP地址转化为数字,charindex ,SUBSTRING
  7. mysql调用短信接口_短信平台接口调用方法参考
  8. php echo nbsp,关于include里面的函数echo的问题
  9. fragment中文网_Android使用Fragment打造万能页面切换框架
  10. ios simulator android,How to open IOS Simulator in Android Studio for Flutter application
  11. mysql和虚拟主机区别_香港空间购买,香港虚拟主机购买,香港免备案空间购买
  12. 2020年IPTV系统解决方案应该注意哪些问题?
  13. C/C++基础题045.PUM
  14. Kettle carte部署与运行
  15. android照片涂抹功能,android:照片涂画功能实现过程及原理详解
  16. stm32时钟问题简单介绍
  17. 《他们创造了数学》——哥德巴赫 演讲稿
  18. html5扩展函数的使用方法,知识分享:JavaScript基础语法
  19. 深圳大数据学习:泛型 --【千锋】
  20. Navicat使用timestamp类型,设置默认使用当前时间

热门文章

  1. 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)
  2. Android4.0 Launcher 源码分析系列(二)
  3. Silverlight RIA Services基础专题
  4. 云的普及难易,云计算普及的难易
  5. 什么是SD-Branch的应用特性?—Vecloud微云
  6. GRUB基本使用介绍
  7. 谈判专家(东方化改题+懒得看标程)
  8. JAVA开发环境的搭建(配置JAVA开发环境)
  9. python 调用shell或windows命令
  10. ios之开发屏幕适配和系统版本适配(转载)