试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

代码思路:
要用栈解决先序遍历,我们首先要知道栈的性质和二叉树先序遍历的规则

栈最基本的就是先进后出

而二叉树先序遍历就是“根左右”

利用这两个性质,我们可以先将根结点入队。
接下来,只要栈不空,我们就出栈一个元素,然后先入右孩子,再入左孩子
(因为栈是先进后出,那我们遍历完根结点之后下一个是左孩子,然后才是右孩子。所以先让右孩子进,再让左孩子进,这样出来的顺序就是我们要的先左后右了)

举例说明:
在这里插入图片描述

代码如下:

typedef struct BiTNode{//二叉树定义char data;BiTNode* lchild;BiTNode* rchild;
}BiTNode,*BiTree;//栈用到的基本操作
void InitStack(SqStack* s);
int Push(SqStack* s,BiTree e);
void Pop(SqStack* s,BiTree* e);
int StackEmpty(SqStack s);//二叉树的非递归前序遍历
void PreOrderTraverseNR	(BiTree T){SqStack s;//声明一个栈sInitStack(&s);//初始化一下Push(&s,T);//根节点入栈while(!StackEmpty(s)){BiTree p;//用于一会记录出栈结点Pop(&s,&p);printf("%c",p->data);//先入右孩子再入左孩子//后面出栈的顺序就是:先左后右if(p->rchild){//右孩子不是NULL,入栈Push(&s,p->rchild);}if(p->lchild){Push(&s,p->lchild);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/162118.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Vim撤销和恢复撤销快捷键

使用 Vim 编辑文件内容时,经常会有如下 2 种需求: 对文件内容做了修改之后,却发现整个修改过程是错误或者没有必要的,想将文件恢复到修改之前的样子。 将文件内容恢复之后,经过仔细考虑,又感觉还是刚才修改…

唐顿庄园的AI圣诞设计(ideogram.ai )

唐顿庄园是一部经典的英国历史剧,讲述了 Crawley 家族在 20 世纪初生活的故事。该剧以其精美的服装、场景和道具而闻名,因此它是圣诞装饰的绝佳灵感。 在本文中,我们将使用 ideogram.ai 创建一个 Downton Abbey 圣诞设计。ideogram.ai 是一个…

java入门,程序=数据结构+算法

一、前言 在学习java的时候,我印象最深的一句话是:程序数据结构算法,对于写java程序来说,这就是java的入门。 二、java基本数据结构与算法 1、数据类型 java中的数据类型8种基本数据类型: 整型 byte 、short 、int…

餐饮加盟信息展示预约小程序的内容如何

餐饮业规模持续增加,相关从业者逐渐增多,对中等规模以上的餐饮品牌来说,当有一定规模后除了开多家直营店外,还会开放招商加盟,扩展品牌、提升营收等。 由于餐饮加盟属于准属性业务,因此传统线下方式不太适…

小程序使用echarts(超详细教程)

小程序使用echarts第一步就是先引用到小程序里面,可以直接从这里下载 文件很多,我们值下载 ec-canvas 就好,下载完成后,直接放在pages同级目录下 index.js 在我们需要的页面的 js 文件顶部引入 // pages/index/index.js impor…

运动耳机品牌排行榜,推荐几款优秀的运动耳机

​说起耳机,相信大家都比较熟悉,特别是对于喜欢运动的爱好人士来说,那更是随身携带着。随着运动耳机的增长,大家都不知道该如何选择了。对于运动耳机除了需要佩戴稳固舒适之外,还有就是音质表现、防水性能、通话质量等…

鲜花展示预约小程序的内容有有哪些

鲜花店市场规模非常高,一方面是鲜花的用途广泛且需求量增加,另一方面则是入行门槛低,很多城市一条街就有可能汇聚了多家门店,尤其是节假日,对客流量高的门店则更加考验,如花束选购预约、信息展示及客户咨询…

基站/手机是怎么知道信道情况的?

在无线通信系统中,信道的情况对信号的发送起到至关重要的作用,基站和手机根据信道的情况选择合适的资源配置和发送方式进行通信,那么基站或者手机是怎么知道信道的情况呢? 我们先来看生活中的一个例子,从A地发货到B地…

分享一下微信小程序里怎么创建会员卡功能

在当今的数字化时代,微信小程序已经成为一种广泛使用的应用模式,涵盖了各种行业。对于企业而言,拥有一个会员卡系统可以更好地管理客户,提高客户忠诚度,并促进消费。本文将探讨如何在微信小程序中创建会员卡功能&#…

HarmonyOS列表组件

List组件的使用 import router from ohos.routerEntry Component struct Index {private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]build() {Row() {Column() {List({ space: 10 }) {ForEach(this.arr, (item: number) > {ListItem() {Text(${item}).width(100%).heig…

坐公交:内外向乘客依序选座(python字典、字符串、元组)

n排宽度不一的座位,每排2座,2n名内外向乘客依序上车按各自喜好选座。 (笔记模板由python脚本于2023年11月05日 21:49:31创建,本篇笔记适合熟悉python列表list、字符串str、元组tuple的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&…

【kali忘记密码解决办法】

🧋1、kali忘记密码 🧉2、重启不停的按【E】(输入法为英文状态)键进入启动前编辑命令(若系统没有出现这个页面,尝试重启以此来进入引导界面) 🍹3、进入启动前编辑命令界面后&#x…