二叉树的后序非递归遍历(巧妙思想)
大家都知道二叉树的前序非递归遍历非常好写:
//二叉树的结构
public class TreeNode {TreeNode left;TreeNode right;int val;TreeNode(int val) {this.val = val;left = right = null;}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
首先判断根是否为空,将根节点入栈
1.若栈为空,则退出循环
2.将栈顶元素弹出,访问弹出的节点
3.若弹出的节点的右孩子不为空则将右孩子入栈
4.若弹出的节点的左孩子不为空则将左孩子入栈
5.返回1
void preOrder(){Stack<TreeNode> stack = new Stack<TreeNode>();if (root != null) {stack.push(root);while (!stack.isEmpty()) {root = stack.pop();visit(root);if (root.right != null) {stack.push(root.right);}if (root.left != null) {stack.push(root.left);}}}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
而二叉树的后序非递归遍历就比较难写,因为涉及到判断节点的访问状态…
现在有个很巧妙的方法:
前序:根->左->右
后序:左->右->根
那么可以把后序当作:根->右->左,然后再反转一下即可。
ArrayList<Integer> postOrder(TreeNode root) {ArrayList<Integer> list = new ArrayList<Integer>();if (root != null) {Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while (!stack.isEmpty()) {TreeNode node = stack.pop();list.add(node.val);if (node.left != null) {stack.push(node.left);}if (node.right != null) {stack.push(node.right);}}//反转Collections.reverse(list);}return list;
}
二叉树的后序非递归遍历(巧妙思想)相关推荐
- 后序非递归遍历二叉树
后序遍历的顺序是左.右.根.而前序遍历的顺序是根.左.右.所以只需将前序遍历稍作改变,变成先遍历根再遍历右最后遍历左即(根右左)就会发现此时的顺序便是后序遍历的倒序了,所以这时候只需将改变后的前序遍历 ...
- 二叉树的中序非递归遍历
二叉树的中序非递归遍历 中序遍历的非递归算法描述如下: 从根节点开始检索,如果当前节点不为空,则将当前节点入栈,让当前节点成为其左孩子节点,再继续上一步的操作 加入当前节点为空了,说明其父节点已经没有 ...
- C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历)
二叉树的非递归遍历C/C++实现: 非递归先序遍历代码: void PreOrderTraversal (struct tree* root) { //非递归先序遍历struct tree* t ...
- 二叉树的前序、中序、后序非递归遍历 python实现
前言 python中二叉树的定义: class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None ...
- 【我的算法笔记】后序非递归遍历模板及其应用
目录 前言 非递归后序遍历算法模板 求树的深度 打印值为x的节点的所有祖先 求节点t,s最近公共祖先节点 输出从每个叶子节点到根节点的逆路径 前言 本篇文章主要介绍非递归后序遍历的算法,并且在这个算法 ...
- 线索二叉树和中序非递归遍历线索化后的二叉树
//线索二叉树 #include<stdio.h> #include<malloc.h> #include<process.h> #define OVERFLOW ...
- 后序非递归遍历二叉树的应用
1.打印值为x的结点的所有祖先 栈从0开始,top初始值-1 #include "stdafx.h" #include<iostream> using namespac ...
- 二叉树的前、中、后的非递归遍历
题目 实现一个链式存储的二叉树,采用非递归的形式,按照前.中.后序的顺序遍历二叉树. 代码 /** * 二叉树的前.中.后序的非递归遍历 **/#include <iostream> us ...
- 数据结构专题 | 先序非递归遍历二叉树
先序非递归遍历二叉树,主要是利用了栈的先进后出原理,用一个栈即可实现该算法,下面我们一起来看一下如何来实现吧 目录 先序建立二叉树 先序递归遍历二叉树 先序非递归遍历二叉树 先序建立二叉树 在进行先序 ...
最新文章
- 鸿蒙系统方舟运行时,方舟编译器立功!第三方App已经落地,距离鸿蒙系统还会远吗?...
- 永恒传奇三服务器维护中,仙境传说ro3月3日5点-10点停服维护
- jupyter notebook代码导出_Jupyter Notebook导出包含中文的pdf_亲测有效
- Nature发布第一张人类造血干细胞发育的全面路线图
- 2021中国企服企业规模化获客体系建设指南
- 中国三大运营商发声!要求纽交所复议退市决定
- python_numpy_中的matrix与array的区别
- 电工模拟接线软件 app_图文详解:户内配电箱的安装及接线方法 ,电气初学者必看!...
- 代码实现自动剪辑视频
- 科技周刊第十期:自顶向下还是自底向上?
- 计算机word表格公开课ppt,word表格制作课件公开课.ppt
- vue如何打开pdf文件
- 宏基因组数据分析:差异分析(LEfSe安装使用及LDA score计算)
- QQ2017熄灭“QQ游戏图标”方法
- 五 IP核行业潜在投资方向和机会
- 【08月13日】预分红股息率最高排名
- html中一些特殊的符号该如何表示
- java导出excel 提示文件格式或文件扩展名有误
- Deep Lab 系列总结
- SSD固态硬盘优化教程