1 二叉树的遍历

1.1 前序遍历

对于每棵子树,先处理根,然后处理左子树,最后处理右子树。根最先访问,所以是前序遍历。

1.2 中序遍历

对于每棵子树,先处理左子树,然后处理根,最后处理右子树。根中间访问,所以是中序遍历。

1.3 后序遍历

对于每棵子树,先处理左子树,然后处理右子树,最后处理根。根最后访问,所以是后序遍历。

2 二叉树的中序遍历的非递归实现

第一,用栈实现;

第二,每个元素都要入栈;

第三,每当有新的元素入栈了,都要检查栈顶元素是不是可以出栈了。

第四,可以出栈的条件:

1, 它的左儿子为NULL

2, 刚进行了一次出栈操作,现在它是新的栈顶元素,这个时候就证明它的左子树已经被访问完了,现在轮到它了。

3 二叉树的后序遍历的非递归实现

入栈:

第一,root无条件入栈

第二,latest_poped为NULL时,左孩子不为null,左孩子入栈;左孩子为null,右孩子不为null,右孩子入栈;

第三,latest_poped不为null时:

latest_poped是左孩子时,右孩子不为null,右孩子入栈;

latest_poped不是孩子时,左孩子不为null,左孩子入栈;左孩子为null,右孩子不为null,右孩子入栈;

出栈:

第一,叶子出栈

第二,latest_poped是右孩子时,出栈

第三,latest_poped是左孩子,并且右孩子为null,出栈。

转载于:https://www.cnblogs.com/hustdc/p/7767883.html

二叉树前序、中序和后序遍历的非递归实现相关推荐

  1. 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

  2. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)

    手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...

  3. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  4. 二叉树遍历的递归、非递归方法(前序、中序、后序,层序)——Java实现

    1. 二叉树的前序遍历(深度优先遍历) 二叉树的节点定义 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(in ...

  5. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  6. 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树

    leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...

  7. 二叉树前序、中序、后序遍历求法

    二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...

  8. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...

    http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...

  9. 二叉树的前序、中序、后序遍历与创建

    #include <iostream> #include <string> #include <stack> using namespace std; struct ...

最新文章

  1. 2022-2028年中国集装箱涂料行业市场研究及前瞻分析报告
  2. VS2012代码提示快捷键
  3. IC/FPGA 技术交流
  4. linq学习笔记(2):DataContext
  5. 《Node.js核心技术教程》读书笔记---思维导图版
  6. ITK:计算代码点之间的时间
  7. 多线程编程(4) - 多线程同步之 Mutex (互斥对象)
  8. 漫谈软件研发特种部队之中的一个
  9. Android 中文API (65) —— BluetoothClass[蓝牙]
  10. 查找算法-------插值查找
  11. Linux建立虚拟ip的方法
  12. U盘启动盘,启动时报错Failed to load ldlinux.c32的解决办法
  13. apache 开启 网页压缩
  14. 俄罗斯方块(C/C++)
  15. 装黑苹果卡在苹果图标_虚拟机装MAC系统一直卡在苹果标志
  16. 最大连通分支Giant Component
  17. pc端下载微信视频号中的视频
  18. [AC自动机+dp] whu oj 1572 I - Cyy and Fzz
  19. flowable-ui(v6.7.2)简单的请假流程审批操作(一)
  20. 水星路由器登录界面找不到服务器,水星路由器管理页面怎么登陆不进去? | 192路由网...

热门文章

  1. 常用的排序算法的时间复杂度和空间复杂度 .
  2. MappedByteBuffer的使用
  3. android元素离边框间距,RecyclerView Item 的分割线 距边框距离问题总结
  4. Android悬浮按钮锚点位置,Android 滑动定位+吸附悬停效果实现
  5. android 删除目录下所有文件大小,Android 删除文件夹(文件夹以及文件夹下所有的文件)、文件...
  6. mybatis配置id自增mysql_mybatis配置oracle的主键自增长
  7. sqlserver安装目录_Jira试用报告(安装及数据迁移篇)
  8. mobilenet cpu 加速_AI降成本利器!阿里云弹性加速计算实例来了,最高节省50%推理成本...
  9. element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
  10. java map映射_【Java】Map 映射接口 概述