非递归中序遍历二叉树总结(2种方法)
算法 非递归中序遍历二叉树总结(2种方法)
@author:Jingdai
@date:2020.12.03
传送门
- 非递归先序遍历二叉树
- 非递归后序遍历二叉树
方法1
先序遍历是第一次遇到该节点遍历;中序是第二次遇到该节点遍历;而后序是第三次遇到该节点遍历。非递归用栈进行遍历,第一次遇到就是压栈时,第二次是弹栈时,所以中序遍历应该弹栈的时候进行遍历。弹栈后代表弹栈节点及其左子树已经遍历完了,所以此时将弹栈节点的右子节点压栈,对其右子树进行同样的操作。代码如下。
public static void inOrderTraverse(TreeNode root) {TreeNode p = root;LinkedList<TreeNode> stack = new LinkedList<>();while (p != null || stack.size() != 0) {while (p != null) {stack.push(p);p = p.left;}p = stack.pop();System.out.println(p.val);p = p.right;}
}
其实仔细观察代码的话会发现其实中序和先序代码除了遍历(这里就是输出语句)的位置不一样,其余的代码完全一样,所以先序和中序会一种,另一种也就会了。ps:先序可以看我上一篇的总结。
方法2 Morris方法
Morris方法是为了将遍历的空间复杂度从 O(h)
降为 O(1)
,如果对Morris遍历过程有问题的可以看我前一篇先序遍历的总结,这里直接上代码。
public static void inOrderTraverse(TreeNode root) {TreeNode cur = root;TreeNode rightmost = null;while (cur != null) {if (cur.left != null) {rightmost = cur.left;while (rightmost.right != null && rightmost.right != cur) {rightmost = rightmost.right;}if (rightmost.right == null) { // firstrightmost.right = cur;cur = cur.left;} else { // secondrightmost.right = null;System.out.println(cur.val);cur = cur.right;}} else {System.out.println(cur.val);cur = cur.right;}}
}
非递归中序遍历二叉树总结(2种方法)相关推荐
- 数据结构之---非递归中序遍历二叉树
二叉树中序非递归遍历算法实现 大家好,我是逝去的粒子,从今天起,我将尝试着数据结构从0开始学习分享,此篇文章作为试验,一方面可以为自己做笔记防止遗忘,另一方面希望可以帮助大家.不废话,正式开始. 1. ...
- 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树
import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...
- 非递归中序遍历二叉树
中序遍历二叉树(递归) void inOrder(BT* root) {if (root == NULL)return;inOrder(root->lchild);cout << & ...
- 非递归先序遍历二叉树总结(3种方法)
算法 非递归先序遍历二叉树总结(3种方法) @author:Jingdai @date:2020.12.03 传送门 非递归中序遍历二叉树 非递归后序遍历二叉树 递归先序遍历二叉树非常的简单,但是面试 ...
- 非递归后序遍历二叉树总结(2种方法)
算法 非递归后序遍历二叉树总结(2种方法) @author:Jingdai @date:2020.12.04 传送门 非递归先序遍历二叉树 非递归中序遍历二叉树 方法1 非递归用栈来辅助遍历,后序遍历 ...
- 无栈非递归中序遍历非线索化二叉树
试设计一个非递归算法,按中根顺序遍历非线索二叉树,但不得用任何辅助. 在执行算法期间,允许改变LLINK和RLINK的值. 如何不用辅助栈非递归遍历二叉树呢? 这里给出了一个比较方便的算法,其基本思路 ...
- 二叉树非递归后序遍历算法的一种简单思路
首先从简单的例子开始 1 2 3 上图二叉树的后序遍历序列是"231", 颠倒一下就是"132", 而其前序遍历是"123" 有什么发现? ...
- 不用栈实现二叉树非递归中序遍历
偶尔看到这样一个问题: 有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针. 要求不用递归,中序遍历这棵树.另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所 ...
- 二叉树非递归中序遍历
二叉树的中序遍历 为什么把中序遍历放在最前面呢,因为在非递归遍历中,这个是最简单也是最容易理解的,所以放在第一个的位置. 中序遍历的递归算法很简单,但是想要非递归的实现,就要用到栈这个数据结构, 那么 ...
最新文章
- Spring管理Strust的Action
- 搜索引擎爬虫蜘蛛的USERAGENT大全
- 微信小程序开发-笔记
- .NET Core 3.0特性初探:C# 8、WPF、Windows Forms、EF Core
- 根据extension field搜索product的技术实现
- SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码
- SMP IRQ affinity
- 永久使用卡巴斯基的方法
- 论文中c语言程序的格式,毕业论文程序代码格式_毕业论文范本_论文的标准格式模板...
- 用树莓派打拳皇游戏(运行 SWF 游戏文件)【Adobe Flash Player + Chromium】
- windows10安装虚拟机virtualbox详细步骤
- Webtoos 仿Q+云桌面框架
- 无线鼠标时好时坏怎么办
- iptables指南删减版
- 计算机无法识别平板电脑,平板电脑连接电脑没反应怎么办【图解】
- android 设置背景ah,Ahjesus,
- ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
- 7-4 宿舍谁最高? (20 分) map+结构体的应用
- 【操作系统】30天自制操作系统--(9)叠加处理
- 升级 phpStudy 中 MySQL 版本