二叉树前序、中序和后序遍历的非递归实现
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
二叉树前序、中序和后序遍历的非递归实现相关推荐
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 二叉树遍历的递归、非递归方法(前序、中序、后序,层序)——Java实现
1. 二叉树的前序遍历(深度优先遍历) 二叉树的节点定义 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(in ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- 二叉树前序、中序、后序遍历求法
二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...
- PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
最新文章
- 2022-2028年中国集装箱涂料行业市场研究及前瞻分析报告
- VS2012代码提示快捷键
- IC/FPGA 技术交流
- linq学习笔记(2):DataContext
- 《Node.js核心技术教程》读书笔记---思维导图版
- ITK:计算代码点之间的时间
- 多线程编程(4) - 多线程同步之 Mutex (互斥对象)
- 漫谈软件研发特种部队之中的一个
- Android 中文API (65) —— BluetoothClass[蓝牙]
- 查找算法-------插值查找
- Linux建立虚拟ip的方法
- U盘启动盘,启动时报错Failed to load ldlinux.c32的解决办法
- apache 开启 网页压缩
- 俄罗斯方块(C/C++)
- 装黑苹果卡在苹果图标_虚拟机装MAC系统一直卡在苹果标志
- 最大连通分支Giant Component
- pc端下载微信视频号中的视频
- [AC自动机+dp] whu oj 1572 I - Cyy and Fzz
- flowable-ui(v6.7.2)简单的请假流程审批操作(一)
- 水星路由器登录界面找不到服务器,水星路由器管理页面怎么登陆不进去? | 192路由网...
热门文章
- 常用的排序算法的时间复杂度和空间复杂度 .
- MappedByteBuffer的使用
- android元素离边框间距,RecyclerView Item 的分割线 距边框距离问题总结
- Android悬浮按钮锚点位置,Android 滑动定位+吸附悬停效果实现
- android 删除目录下所有文件大小,Android 删除文件夹(文件夹以及文件夹下所有的文件)、文件...
- mybatis配置id自增mysql_mybatis配置oracle的主键自增长
- sqlserver安装目录_Jira试用报告(安装及数据迁移篇)
- mobilenet cpu 加速_AI降成本利器!阿里云弹性加速计算实例来了,最高节省50%推理成本...
- element的滚动去掉横向_textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法
- java map映射_【Java】Map 映射接口 概述