利用栈实现的二叉树的先、中、后序遍历

二叉树的后序遍历(C语言) 首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节点开始先遍历其左孩子,①接着同样继续遍历其左孩子的左孩子,直到某个左孩子节点的左孩子为NULL时,②开始遍历其右孩子,如果其为NULL则访问该节点的值域,并返回其双亲节点重复第二步的操作,如果其不为NULL则以该节点为根节点重复第一步的操作.直到访问完所有节点时结束递归. 代码: void BTreePostOrder(struct TreeNode* root,int* arry 阅读详情

利用栈实现二叉树的遍历

栈的操作参考:

先序遍历

status PreOrderbyStack(BiTree *T, void (*visit)(BiTree *T))
{
	stack s;
	BiTree *pmove;
	initStack(&s);

	pmove = T;
	Push(&s, T);
	while(!IsStackEmpty(&s))
	{
		Pop(&s, &pmove);
		if(pmove == NULL)
		{
			continue;
		}
		else
		{
			visit(pmove);
			Push(&s, pmove->rchild);
			Push(&s, pmove->lchild);
		}
	}
	destroyStack(&s);
	return TRUE;
}

中序遍历

status InOrderbyStack(BiTree *T, void (*visit)(BiTree *T))
{
	stack s;
	BiTree *pmove;
	BiTree *flag;
	initStack(&s);

	pmove = T;
	Push(&s, T);
	Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子还未访问
	while(!IsStackEmpty(&s))
	{
		Pop(&s, &flag);
		Pop(&s, &pmove);
		if((int)flag == 1)
		{
			while(pmove->lchild != NULL)
			{
				Push(&s, pmove);
				Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子已被访问
				pmove = pmove->lchild;
			}
		}
		visit(pmove);
		if(pmove->rchild != NULL)
		{
			Push(&s, pmove->rchild);
			Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子还未访问
		}
	}

	destroyStack(&s);
	return TRUE;
}

后序遍历

status PostOrderbyStack(BiTree *T, void (*visit)(BiTree *T))
{
	stack s;
	BiTree *pmove;
	BiTree *flag;
	initStack(&s);

	pmove = T;
	Push(&s, T);
	Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子还未访问
	while(!IsStackEmpty(&s))
	{
		Pop(&s, &flag);
		Pop(&s, &pmove);
		if((int)flag == 0)
		{
			while(pmove->lchild != NULL)
			{
				Push(&s, pmove);
				Push(&s, (BiTree *)1);//加入标号,表示这个节点左孩子已被访问
				pmove = pmove->lchild;
			}
		}
		if((int)flag < 2)
		{
			if(pmove->rchild != NULL)
			{
				Push(&s, pmove);
				Push(&s, (BiTree *)2);//加入标号,表示这个节点右孩子已被访问
				pmove = pmove->rchild;

				Push(&s, pmove);
				Push(&s, (BiTree *)0);//加入标号,表示这个节点左孩子还未访问
				continue;
			}
		}
		visit(pmove);
	}

	destroyStack(&s);
	return TRUE;
}
非递归实现二叉树的先序遍历,中序遍历,后序遍历 非递归实现二叉树的先序遍历,中序遍历,后序遍历 1. 二叉树先序遍历(非递归) 先序的遍历的访问顺序为先根节点,再左孩子,最后右孩子。 所以,根据栈后进先出的特点,应先入栈右孩子,再入栈左孩子。 先序遍历,借助栈实现 1根节点入栈 2判断栈顶元素是否为空 3访问栈顶元素,出栈 4栈顶元素的右孩子若不为空,入栈。栈顶元素的左孩子不为空,入栈。 5循环2-4 ... 阅读详情

相关推荐

二叉树遍历出栈入栈图

二叉树递归和非递归遍历出栈入栈图。分析出栈入栈顺序。

Java:树的前序、中序、后序遍历代码实现--利用栈实现

树的前序、中序、后序遍历是常见的树检索方式,本文分享了Java实现树的前序、中序、后序遍历的代码–利用栈实现。 希望对大家有用!

qq_46119575的博客 372

rv1126平台spi屏调试

st7789v2 i2c调试

zuoanyouzhuan_的博客 2038

中序遍历的栈实现

中序遍历的几种情况 分析1:什么时候访问根、什么时候访问左子树、什么访问右子树 当左子树为空或者左子树已经访问完毕以后,再访问根 访问完毕根以后,再访问右子树。 123 分析2:为什么是栈,而不是其他队列。 先走到的后访问、后走到的先访问,显然是栈结构 12 分析3:结点所有路径情况 步骤1:  如果结点有左子树,该结点入栈;  如果结点没有左子

coolwriter的博客 4070

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

ABAP BOM展开避坑指南:CS_BOM_EXPL_MAT_V2函数参数配置详解

本文深入解析了SAP ABAP开发中用于物料清单展开的核心函数CS_BOM_EXPL_MAT_V2。针对其复杂的参数配置,如CAPID、STLAN、DATUV和MEHRS,提供了详细的避坑指南和最佳实践,帮助开发者避免数据错误与性能陷阱,实现高效、准确的BOM多层展开。

pea55的博客 855

用栈的方式来实现二叉树的先、中、后序遍历

java 二叉树的遍历

xiaogaotongxue__的博客 3196

从零到一:手把手教你用YonBuilder for NCC搭建NC Cloud 2021.11开发环境(含避坑指南)

本文详细指导如何使用YonBuilder for NCC搭建NC Cloud 2021.11开发环境,涵盖硬件要求、软件安装、YonBuilder配置及常见故障排除。特别提供避坑指南,帮助开发者快速上手NCC开发,确保环境配置的原子化分解和开发思维的体系化建立。

weixin_42523326的博客 345

栈模拟二叉树的前序遍历,中序遍历,后序遍历

分别讲述了使用递归方式和栈模拟方式进行二叉树遍历

Lyajpunov的博客 1974

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3181

从数据同化到水文模拟:CMADS如何重塑SWAT模型的中国实践

本文探讨了CMADS数据集与SWAT模型在中国复杂地形水文模拟中的融合实践。CMADS通过高分辨率气象数据同化技术,显著提升了SWAT模型在中国特殊地理环境下的模拟精度,特别是在数据稀缺区域。文章详细分析了CMADS的技术架构、应用案例及与传统数据的性能对比,为水文研究提供了新的技术支撑。

git9versioner的博客 630

二叉树2:迭代(栈)实现二叉树的先序遍历

二叉树1:递归实现二叉树的先序、中序、后序遍历 中给出了用递归的方式实现二叉树遍历的流程,这个文章总结一下【用迭代的方法实现二叉树的先序遍历】。 迭代的关键就是用栈 这里先模拟一下如何使用栈来遍历这个二叉树。 我们需要一个栈:st。 一个列表:vec。列表用来保存最后遍历的结果,也就是最终先序遍历的顺序。 先序遍历的是中左右,总体思路是这样的: step1:访问到的这个结点,先进栈; step2:立马将其值放入vec列表中(按顺序),并让这个结点出栈; step4:接着 先 访问其右子树(不为空的话

qq_43591406的博客 2494

Openai gym environment for multi-agent games

用于多智能体游戏的 OpenAI Gym 环境

suiusoar 1194

利用栈实现二叉树的先序,中序,后序遍历的非递归操作

[cpp] view plaincopy #include    #include    #include    #include    #include    #include    using namespace std;   typedef struct BiTNode{       char data;       BiTNode *lchi

.... 5522

【PCIe 总线及设备入门学习专栏 3.2.2 -- PCIe 中什么是 SR-IOV】

SR-IOV(Single Root I/O Virtualization)是 PCIe 规范中的一种技术,允许物理 PCIe 设备(称为 Physical Function, PF)虚拟化为多个虚拟设备(称为 Virtual Functions, VFs),使多个操作系统或虚拟机能够共享同一个物理设备。SR-IOV:一种 PCIe 虚拟化技术,允许将一个物理 PCIe 设备虚拟化为多个虚拟设备。:物理设备的主要管理接口。:PF 的轻量级副本,分配给虚拟机或操作系统。

CodingCos的博客 1513

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ZT 二叉树先序,中序,后序遍历非递归实现

二叉树先序,中序,后序遍历非递归实现 分类:数据结构及算法2012-04-28 14:308572人阅读评论(6)收藏举报 structc 利用栈实现二叉树的先序,中序,后序遍历的非递归操作 [cpp]view plaincopy #include<stdio.h> #include<malloc.h>...

weixin_30932215的博客 89

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

二叉树非递归后序遍历

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /*后...

发现问题,并解决问题,批判性思维 8399

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

二叉树的递归和非递归遍历

二叉树递归和非递归遍历

bubbleyang的博客 3214

后序遍历非递归 Java

思路:借助先序遍历交换子树。 创建二叉树 原二叉树 交换左右子树的二叉树 得出: 先序遍历: 1,2,4,5,3,6 逆后序遍历:1,3,6,2,5,4 后序遍历:4,5,2,6,3,1 观察发现:交换左右子树的二叉树先序遍历=二叉树逆后序遍历=后序遍历反着来 因此,我们的目标是,想办法吧二叉树变成交换左右子树的二叉树,然后push进一个stack里,最后只要pop出...

GOOD LUCK 1304

二叉树三种遍历(先序,中序,后序)----超详细

介绍 二叉树的遍历有许多种,例如深度优先搜索,广度优先搜索,在这里,我只介绍先序,中序,后序三种的递归与非递归遍历方法。

qq_55783740的博客 3684

如何用非递归方式实现二叉树的先序、中序、后序遍历?

如何用非递归方式实现二叉树的先序、中序、后序遍历? 先上递归的实现版本: public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } public static void preOrderRecur(Node head) { if (head == null) { re

零栀 990

#数据结构与算法学习笔记#PTA11:先序遍历+中序遍历转后序遍历/二叉树非递归遍历/二叉树栈遍历(JAVA)

2018.4.18 这道题说的是利用栈来模拟二叉树,通过栈的出入情况,模拟出这棵二叉树,并后序遍历打印这棵二叉树。 这题关键点在于理解二叉树的非递归遍历,能够看得出入栈顺序就是二叉树的先序遍历序列,出栈顺序就是二叉树的中序遍历序列。理解了这点这道题就转换成已知先序遍历+中序遍历,打印二叉树的后序遍历的问题了。 有两个思路:1.根据先序遍历和中序遍历先构建一棵二叉树,再后序遍历打印这棵树;2....

NJU_ChopinXBP的博客 1072

后序遍历及其算法-基于栈的遍历

后序遍历及其算法-基于栈的遍历 1.后序遍历算法原理讲解 二叉树后序遍历示意图 若树为空,则空操作返回。否则,从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点。(左右中)逆时针型(左右 中) 算法思路 从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右节点再压左节点。 在这个算法中,输出到最终结果的顺序按照 Top->Bottom 和 Left->Righ...

qq_38670588的博客 1240

【数据结构】遍历二叉树(递归和非递归遍历的先序、中序和后序遍历、层次遍历法)

二叉树 递归和非递归遍历的先序、中序和后序遍历、层次遍历法

ChenZHIHAO_y的博客 1972

数据结构-二叉树(先序、中序、后序遍历二叉树的非递归算法)

文章目录思路Java 实现 思路 上一篇博文我们讲了二叉树的递归算法,这里我们来写一波二叉树的非递归算法 为什么说遍历二叉树可以用递归 二叉树每个结点都满足某个遍历次序,然后从根结点开始遍历,这个流程非常满足递归的模型,就是一个大的问题按照某种方式可以划分为许多细小的问题,然后这些细小的问题又可以用同样的方式继续划分,直到为空或者说直到有个出口 所有递归可以转化成非递归 那非递归我该如何实现呢?这...

abcnull 的博客 1406
上一篇: 二叉树的基本操作
下一篇: 算术表达式二叉树表示
asd_wolf
博客等级 码龄18年 38粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值