二叉树 非递归 先序遍历 中序遍历 后序遍历 层次遍历

实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法 #include"iostream" #define maxsize 50 using namespace std; class node{ private: char data; node* lchild; node* rchild; public: void createnode(node *&,char *); void fnode(node* b) { if(b!=NULL 阅读详情

二叉树 中很多问题都是通过遍历的方式来解决的,今天就来谢谢最常见的二叉树非递归遍历。


先定义一下节点的信息:

class TreeNode{
	public int value;
	public TreeNode left;
	public TreeNode right;
	
	public TreeNode(int value){
		this.value = value;
	}
}

1. 先序 非递归 遍历

//先序非递归遍历
public void preOrderUnRecur(TreeNode node){
	if(node==null){
		return;
	}
	
	Stack<TreeNode> stack = new Stack<>();
	stack.add(node);
	while(!stack.isEmpty()){
		System.out.println(node.value);
		if(node.right!=null){
			stack.add(node.left);
		}
		if(node.left!=null){
			stack.add(node.right);
		}
	}
}

2. 中序 非递归 遍历

public void inOrderUnRecur(TreeNode head){
	if(null==head){
		return;
	}
	
	Stack<Node> stack = new Stack<>();
	while(!stack.isEmpty() || head!=null){
		if(head!=null){
			stack.push(head);
			head = head.left;
		}else{
			head = stack.pop();
			System.out.println(head.value);
			head = head.right;
		}
	}
}

3. 后序 非递归 遍历

public void posOrderUnRecur(TreeNode h){
	if(h==null){
		return;
	}
	Stack<TreeNode> stack = new Stack<>();
	stack.push(h);
	TreeNode c = null;
	while(!stack.isEmpty()){
		c = stack.peek();
		if(c.left!=null && h!=c.left && h!=c.right){
			stack.push(c.left);
		}else if(c.right!=null && h!=c.right){
			stack.push(c.right);
		}else{
			System.out.print(stack.pop().value+" ");
			h = c;
		}
	}
}

4. 层序遍历

public void layerTran(TreeNode root){
	if(root==null){
		return;
	}
	
	Queue<TreeNode> queue = new LinkedList<>();
	queue.add(root);
	while(!queue.isEmpty()){
		TreeNode c = queue.poll();
		System.out.println(c.value);
		
		if(c.left!=null){
			queue.add(c.left);
		}
		
		if(c.right!=null){
			queue.add(c.right);
		}
	}
}


二叉树的非递归遍历和层次遍历详解 二叉树非递归遍历非递归的后序遍历二叉树 //非递归的后续遍历二叉树 void HXprint(Tree *tree){ Stack s = initStack(); //初始化一个下面使用的栈 treeNode *p = tree; //新建一个遍历指针 treeNode *r=NULL; //辅助变量 cout<<"-------"<<endl; while(p||!isEmpty(s)){ //当遍历变量和栈同时为空时 表示遍历完成 阅读详情

相关推荐

数据结构-二叉树[非递归遍历](先序遍历,中序遍历,后续遍历,层次遍历)

本文参考自数据结构-二叉树[非递归遍历](先序遍历,中序遍历,后续遍历,层次遍历) 查看原文: 原文地址 数据结构-二叉树[非递归遍历] 1.二叉树概念 2.二叉树的构造及删除     不得不说下二叉树的构造,本来我是想找非递归实现的,结果只看到了完全二叉树和满二叉树(下文有)的构造方法,所以这一部分我暂时函数用前序的方法构造和删除,然后二叉树的概念在上篇文:二叉树的递归实现有介绍所以放...

running987的博客 629

非递归中序遍历

非递归中序遍历 中序遍历的顺序为:左-中-右,通过栈这个数据结构来记录遍历的历史,每个节点按照右-中-左的顺序压栈,整棵树按照右子树-根-左子树的顺序压栈。最后全部pop出来。代码如下: 递归实现: void middleOrder(Node* node) { if (node == nullptr) { return; } middleOrder(nod...

tannanxi的博客 4823

【二叉树遍历】二叉树的四种遍历方式(先序遍历、中序遍历、后序遍历、层次遍历)

这篇文章,主要介绍二叉树的四种遍历方式,包括:先序遍历、中序遍历、后序遍历、层次遍历,递归和非递归的实现方式。

✅ Java 开发工程师 1107

非递归实现中序遍历

非递归实现中序遍历

linminx的博客 3492

STGCN+YOLOV8行为分类

使用关节点追踪网络获取关节点数据,以yolo-v8网络为例,获取2D关节点数据。此次实验采用KTH动作识别数据集,包含人步行、慢跑、跑步、拳击、挥手和拍手等动作。

SDADASDAF的博客 3892

【AIGC】人工智能训练师(高级)考试题库-橙点同学

例如,在嘈杂的环境中进行声音转文字,即使是优秀的模型也可能会出现一些错误,但这并不意味着该模型本身质量差,在其他较为理想的环境下,它可能会有很好的表现。例如,在一些语音应用和系统中,会使用SSML来实现对语音合成的精细控制,如调整语速、语调、音量等,而这些应用和系统的开发往往会遵循W3C的相关标准和框架,其中就包括SSML这一语音合成标记语言。例如,在语音识别等场景中,像“去火车站怎么走”这样的语音指令,没有其他嘈杂的背景声音或模糊不清的表述,就属于无噪音的数据,有利于系统准确地进行处理和分析。

RisunJan的博客 9921

二叉树遍历之中序遍历算法(非递归、递归)入门详解

中序遍历的原理很简单,也就是把树根的访问放在中间。访问结点的次序是:“左—>根—>右”,也就是首先访问左子树,之后访问树根,最后访问右子树。对于左、右子树而言,其访问的次序依然是“左—>根—>右”。 不要小看这里的次序发生的改变,其实具体的实现方式比先序遍历也要麻烦了。 二叉树的中序遍历与先序遍历一样,都可以通过递归算法实现,也可以通过非递归算法实现。......

sunnyoldboy博客 2万+

智能安防摄像头埋点实践:用户行为与设备状态的闭环监控(含AI事件)

智能安防摄像头埋点闭环体系设计及应用实践 摘要: 本文系统阐述了智能安防摄像头埋点闭环体系的设计与实践。首先分析了传统埋点的不足及闭环埋点的价值,提出由用户行为埋点、设备状态埋点和AI事件埋点构成的三维埋点体系框架。详细介绍了闭环监控的四大流程:数据采集、汇聚清洗、分析建模和智能决策。通过误报优化、个性化策略等案例展示了AI事件闭环的实际应用价值,并探讨了隐私合规、性能优化等关键挑战的解决思路。最后展望了端侧AI增强、预测型埋点等未来发展趋势。该体系实现了从数据采集到业务决策的完整闭环,有效提升了AI模型性

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 1046

二叉树三种非递归遍历

二叉树三种非递归遍历王道书思想方法实现

qq_52526050的博客 3395

相机SDK开发C++篇-常用开发函数封装讲解(迈德威视相机)

/ 软触发失败,返回false } return true;= (nRet = CameraSetSysOption("NumBuffers", QString("%1").arg(getImageBufferNodeNum()).toLocal8Bit().data()))) { setLastErrorMsg("相机#%1设置缓存区数量错误,错误码:%2").arg(getCameraIndex()).arg(nRet);

GodJhin的博客 1542

Python爬虫selenium验证-中文识别点选+图片验证码案例

环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer。能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建。截图每个字符,并基于ddddocr识别。根据坐标,在验证码上进行点击。

dme.的博客 2165

C语言实现非递归先序、中序、后序遍历

C语言实现非递归先序、中序、后序遍历

呵呵哒!的博客 7187

Win11此电脑怎么放在桌面上?Win11此电脑如何显示在电脑桌面上?

相信用习惯Win10的用户都喜欢电脑电脑桌面上的此电脑,但是很多用户更新完Win11正式版以后,发现桌面只有回收站和Microsoft Edge图标,没有此电脑。那么,Win11此电脑要如何显示呢?下面小编为大家简单介绍一下操作方法!5、桌面图标设置窗口,点击勾选计算机,然后点击确定,桌面就可以显示此电脑图标了。1、桌面空白处,点击右键,在打开的菜单项中,选择显示设置;4、个性化 - 主题,相关设置下,点击桌面图标设置;3、右侧点击主题(安装、创建、管理);2、设置窗口,左侧点击个性化;

shengyin714959的博客 13万+

二叉树的先序遍历,中序遍历,后序遍历,层次遍历(递归和非递归)

二叉树的先序遍历,中序遍历,后序遍历,层次遍历(递归和非递归) 先序遍历 二叉树的先序遍历是进行先根遍历,接下来是左子树,然后是右子树这样的顺序。 void preorder(BiTree T){ if(T!=NULL){ visit(T); preorder(T->left); preorder(T->right); }...

raoxinyue的博客 1528

【全球人口数据集】全球人口密度数据集GPWv4

全球人口密度数据集GPWv4

WW、forever的博客 1003

使用 MATLAB/Simulink + Simscape Electrical + SimPowerSystems + Stateflow,构建一个多能互补微电网系统的动态响应仿真模型

本文详细介绍了使用MATLAB/Simulink构建多能互补微电网动态响应仿真模型的方法。文章从系统架构设计入手,包含光伏、风电、柴油发电机、锂电池储能等多种组件,重点讲解了建模过程、控制策略(下垂控制、PLL、SOC管理)和模式切换逻辑(Stateflow)。通过四种典型场景(负荷突增、光伏出力骤降、并网/孤岛切换、电动机启动)的仿真分析,验证了微电网在动态响应中的关键性能指标,并提出了高可靠性设计建议。该模型为微电网的稳定性分析和优化设计提供了有效工具,特别强调了储能系统在快速功率支撑中的重要作用。

amy_mhd的博客 160

二叉树遍历相关算法题|后序遍历非递归|下到上左到右层次遍历|先序遍历非递归(C)

因为后序是要左右中的顺序遍历,现在读取栈顶的D,是后序遍历的第一个节点,已经确保D没有左孩子,再看D有没有右孩子,因为D没有右孩子,D出栈,并访问D节点的数据,这表示以D为根节点的子树已经遍历完毕。由于cur指向NULL,再走else逻辑,读取栈顶元素B,由于B有右孩子但是已经被访问过,直接弹出B,访问B的数据,将r指向B,cur指向NULL。cur每次指向cur的left来遍历,如果cur不为空,全部入栈,A,B,D,直到cur指向D的左孩子是NULL。将E弹出,访问E的数据,将r指向E,将cur置空。

ChoSeitaku的博客 1219

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

二叉树的先序遍历(递归和非递归)、中序遍历(递归和非递归)、后序遍历(非递归)及层次遍历java实现

二叉树的先序遍历,递归实现: public List&lt;Integer&gt; preorderTraversal(TreeNode root) { //用栈来实现 List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;(); PreOrderTraversal(root,list...

渣渣 1648

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

二叉树的遍历(先序遍历,中序遍历,后序遍历,层次遍历)

二叉树简介 维基百科对二叉树的定义:二叉树(英语:Binary tree)是每个节点最多只有两个分支(不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”和“右子树”。二叉树的分支具有左右次序,不能颠倒。 二叉树的遍历有4种方式,先序遍历,中序遍历,后序遍历,层次遍历,前三者均属于深度优先遍历,先序、中序、后序指的是遍历时根节点相对于左右孩子的次序,先序遍历的顺序为根节点->左子树->

胡LiuJia@BLOG 7190

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C语言 数据结构】二叉树的遍历

按照层次从左往右输入树中结点的值,0 表示空结点,# 表示输入结束:1 2 3 4 5 6 7 #按照层次从左往右输入树中结点的值,0 表示空结点,# 表示输入结束:1 2 3 4 5 6 7 #

HR的博客 9223

算法之二叉树各种遍历

树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度

落日小屋 20万+

先序中序后序遍历二叉树的递归算法C语言,编写一个程序,实现二叉树的先序遍历,中序遍历,后序遍历的各种递归和非递归算法,以及层次遍历的算法...

满意答案文件 main.cpp 代码如下:#include // malloc()等#include // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等#include // atoi(),exit()#include // 数学函数头文件,包括floor(),ceil(),abs()等#define ClearBiTree DestroyBiTree // 清空二叉树和销毁二叉树的...

weixin_39792803的博客 3517

非递归实现二叉树先序、中序、后序和层序遍历

文章目录用非递归的方式实现二叉树的先序遍历用非递归的方式实现二叉树的中序遍历:用非递归的方式实现二叉树的后序遍历:用非递归的方式实现二叉树的层次遍历: 用递归方式实现二叉树先序、中序和后序遍历很简单。 用递归方法解决的问题都能用非递归的方法实现。递归就是利用函数栈来保存信息,如果用自己申请的数据结构来代替函数栈,也可以实现相同的功能。 用非递归的方式实现二叉树的先序遍历 1、申请一个栈stack,然后将头节点压入stack中。 2、从stack中弹出栈顶节点,打印,再将其右孩子节点(不为空的话)先压入s

将~军的博客 1539

二叉树的相关操作,先、中、层次遍历二叉树

基于链式存储的二叉树的操作 遍历:先序(根-左-右),中序(左-根-右),后序(左-右-根) typedef int TElemtype; typedef char Elemtype; #define Increament 100 #define Status int #define Error -1 #define ok 0 #define True 1 #define B...

m0_37976933的博客 1810

二叉树的前序、中序、后序、层次遍历

二叉树的遍历:    二叉树的遍历是指按照某种次序对所有结点进行访问且每个结点只被访问一次的操作。因为二叉树具有递归结构,因此可用递归进行遍历。 (二叉树定义及性质:https://blog.youkuaiyun.com/my_miuye/article/details/90610503) 先序遍历: 若二叉树为空,则空操作返回 否则,访问根结点,再先序遍历左子树,然后先序遍历...

谬也的博客 1212

二叉树的先序、中序、后序、层次遍历的递归以及非递归代码-----Java

本次拟整理一下二叉树的中序、后序、先序、层次遍历的递归以及非递归代码实现, 1.基础知识: 根据访问结点操作发生位置命名: ① NLR:前序遍历(Preorder Traversal 亦称(先序遍历)) ——访问根结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(Inorder Traversal) ——访问根结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(Postor...

weixin_44438340的博客 368
上一篇: 网易乐得 线下笔试 求第N个丑数 Java实现
下一篇: 如何将Android Studio项目提交(更新)到github
方丈abbot
博客等级 码龄10年 2粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值