二叉树遍历的非递归方法
https://blog.csdn.net/qiuxinfa123/article/details/84880786
2.先序遍历。非递归先序遍历的思路如下:
1.先将根节点入栈
2.访问根节点
3.如果根节点存在右孩子,则将右孩子入栈
4.如果根节点存在左孩子,则将左孩子入栈(注意:一定是右孩子先入栈,然后左孩子入栈)
5.重复2-4
//先序遍历非递归public void preOrder2(){Stack<Node> stack = new Stack();Node p = root;stack.push(p);while (!stack.empty()){p = stack.pop();//输出当前节点System.out.println(p);//右节点不为空入栈if (p.right != null){stack.push(p.right);}if (p.left != null){stack.push(p.left);}}}
3.中序遍历。 非递归中序遍历的思路如下:
1.先将根节点入栈
2.将当前节点的所有左孩子入栈,直到左孩子为空
3.访问栈顶元素,如果栈顶元素存在右孩子,则继续第2步
4.重复第2、3步,直到栈为空并且所有的节点都被访问
//中序遍历非递归public void infixOrder2(){Stack<Node> stack = new Stack<>();Node p = root;while (p != null || !stack.empty()){//根节点和当前节点的所有左子节点入栈while (p != null){stack.push(p);p = p.left;}//访问栈顶p = stack.pop();//输出System.out.println(p);if (p.right != null){p = p.right;}else {p = null;}}}
4.后序遍历。 后续遍历的非递归实现思路:
1.根节点入栈
2.将根节点的左子树入栈,直到最左,没有左孩子为止
3.得到栈顶元素的值,先不访问,判断栈顶元素是否存在右孩子,如果存在并且没有被访问,则将右孩子入栈,否则,就访问栈顶元素
//后序遍历非递归public void postOrder2(){Stack<Node> stack = new Stack<>();Node p = root;Node pre = null;//上一次访问的节点while (p!=null || !stack.empty()){//根节点和所以左孩子入栈while (p != null){stack.push(p);p = p.left;}//访问栈顶元素但不出栈p = stack.peek();if (p.right == null || p.right == pre){p = stack.pop();System.out.println(p);pre = p;p = null;}else {p = p.right;}}}
二叉树遍历的非递归方法相关推荐
- 漫谈二叉树遍历(非递归)
------这篇文章旨在提出一种简单方便,易于理解时空复杂度低且风格统一的二叉树非递归遍历方法. 从二叉树先序遍历开始 二叉树的先序遍历(非递归)相比中后序是最少花哨.最统一的.一般来说先序遍历的代码 ...
- java使用btree_java数据结构之二叉树遍历的非递归实现
算法概述 递归算法简洁明了.可读性好,但与非递归算法相比要消耗更多的时间和存储空间.为提高效率,我们可采用一种非递归的二叉树遍历算法.非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似. ...
- 二叉树遍历的非递归算法
大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...
- 二叉树遍历(非递归)
文章目录 二叉树遍历非递归版本 前序遍历 中序遍历 后序遍历 层序遍历 层序遍历+map记录高度 二叉树遍历非递归版本 前序遍历 如果右侧不为空,则右侧进栈,随后是左侧进栈.因为栈是先进后出,所以实现 ...
- 二叉树遍历的非递归实现
作者:冯老师,华清远见嵌入式学院讲师. 一.递归的定义及特点 递归是指某个函数直接或间接的调用自身.问题的求解过程就是划分成许多相同性质的子问题的求解,而小问题的求解过程可以很容易的求出.递归问题的关 ...
- 二叉树遍历 递归/非递归/morris
前序遍历 力扣 递归 class Solution { public:vector<int> ans;vector<int> preorderTraversal(TreeNod ...
- 二叉树遍历(非递归遍历)
#include <iostream> #include <vector> #include <stack>using namespace std;//思路分析 / ...
- python 二叉树遍历递归非递归_python实现二叉树递归遍历与非递归遍历
一.中序遍历 前中后序三种遍历方法对于左右结点的遍历顺序都是一样的(先左后右),唯一不同的就是根节点的出现位置.对于中序遍历来说,根结点的遍历位置在中间. 所以中序遍历的顺序:左中右 1.1 递归实现 ...
- 二叉树 2.0 -- 非递归遍历
二叉树递归遍历存在的问题 如果我们的二叉树只有左子树,而且树的高度还很深的时候,这个时候递归调用遍历的时候,栈帧空间开辟的较大,很可能造成栈溢出.但是我们一个程序中,为堆分配的空间要比栈大的多,这个时 ...
最新文章
- 变焦即可判断物体的距离
- 百度危矣:乱评程苓峰《360的章鱼手要抢谁家饭碗?》
- mysql索引使增删变慢_mysql优化(四)–索引
- maven 按业务拆分模块_gradle|springboot+gradle多模块化应用
- Netty 的基本简单实例【服务端-客户端通信】
- JavaScript 插件的书页翻转效果
- COLING 2020 | 字符感知预训练模型CharBERT
- testlink配置修改
- jeb安装教程_JEB2插件教程之一
- Python画图显示中文
- 黑群晖 7.0 安装
- php开发微信小程序教程,从零开始开发微信小程序步骤(三)
- crmeb安装教程说明
- python 主成分分析 (PCA)
- 【毕业设计】大数据 电影数据分析与可视化系统 - python Django 大数据 可视化
- 计算机网络安全学校,网络空间安全学院
- Mapped Statements collection already contains value for com.bai.dao.Userdao.UserByID
- pytorch seq2seq模型中加入teacher_forcing机制
- Android 时间格式化
- 回首过去 展望未来
热门文章
- 一个(伪)MaterialDesign风格的博客园皮肤
- Flex AIR 文件对象操作
- Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介...
- CF Vicious Keyboard 构造水题
- UVa-10820 Send a Table 欧拉函数
- 轻量级锁_并发编程实战05:锁的状态
- python基础公式_一、Python基础(数据类型、基本函数、基本运算)
- numpy数组按某一维度相加_Python数据分析之NumPy(高级篇)
- python 隐藏命令行窗口_python如何只执行cmd中的动作,但消除或隐藏cmd窗口 - 小众知识...
- cad刷新快捷键_第16期分享:常用电脑快捷键是哪些?