- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树遍历的非递归实现
前面给出的二叉树先序、中序和后序三种遍历算法都是递归算法。当给出二叉树的链式存储结构以后,用具有递归功能的程序设计语言很方便就能实现上述算法。然而,并非所有程序设计语言都允许递归;另一方面,递归程序虽然简洁,但可读性一般不好,执行效率也不高。因此,就存在如何把一个递归算法转化为非递归算法的问题。解决这个问题的方法可以通过对三种遍历方法的实质过程的分析得到。
如图6.3(b)所示的二叉树,对其进行先序、中序和后序遍历都是从根结点A开始的,且在遍历过程中经过结点的路线是一样的,只是访问的时机不同而已。图6.9中所示的从根结点左外侧开始,由根结点右外侧结束的曲线,为遍历图6.3(b)的路线。沿着该路线按△标记的结点读得的序列为先序序列,按*标记读得的序列为中序序列,按⊕标记读得的序列为后序序列。
然而,这一路线正是从根结点开始沿左子树深入下去,当深入到最左端,无法再深入下去时,则返回,再逐一进入刚才深入时遇到结点的右子树,再进行如此的深入和返回,直到最后从根结点的右子树返回到根结点为止。先序遍历是在深入时遇到结点就访问,中序遍历是在从左子树返回时遇到结点访问,后序遍历是在从右子树返回时遇到结点访问。
图6.9 遍历图6.3(b)的路线示意图
在这一过程中,返回结点的顺序与深入结点的顺序相反,即后深入先返回,正好符合栈结构后进先出的特点。因此,可以用栈来帮助实现这一遍历路线。其过程如下。
在沿左子树深入时,深入一个结点入栈一个结点,若为先序遍历,则在入栈之前访问之;当沿左分支深入不下去时,则返回,即从堆栈中弹出前面压入的结点,若为中序遍历,则此时访问该结点,然后从该结点的右子树继续深入;若为后序遍历,则将此结点再次入栈,然后从该结点的右子树继续深入,与前面类同,仍为深入一个结点入栈一个结点,深入不下去再返回,直到第二次从栈里弹出该结点,才访问之。
(1)先序遍历的非递归实现
在下面算法中,二叉树以二叉链表存放,一维数组stack[MAXNODE]用以实现栈,变量top用来表示当前栈顶的位置。
void NRPreOrder(BiTree bt)
{/*非递归先序遍历二叉树*/
BiTree stack[MAXNODE],p;
int top;
if (bt==NULL) return;
top=0;
p=bt;
while(!(p==NULLtop==0))
{ while(p!=NULL)
{ Visite(p-data); /*访问结点的数据域*/
if (topMAXNODE-1) /*将当前指针p压栈*/
{ stack[top]=p;
top++;
}
else { printf(“栈溢出”);
return;
}
p=p-lchild; /*指针指向p的左孩子*/
}
if (top=0) return; /*栈空时结束*/
else{ top--;
p=stack[top]; /*从栈中弹出栈顶元素*/
Visite(p-data); /*访问结点的数据域*/
p=p-rchild; /*指针指向p的右孩子结点*/
}
}
}
算法 6.9
对于图6.3(b)所示的二叉树,用该算法进行遍历过程中,栈stack和当前指针p的变化情况以及树中各结点的访问次序如表6.1所示。
表6.1 二叉树先序非递归遍历过程
步骤 指针p 栈stack内容 访问结点值 初态 A 空 1 B A A 2 D A,B B 3 ∧ A,B,D D 4 G A,B 5 ∧ A,B,G G 6 ∧ A,B 7 ∧ A 8 C 空 9 E C C 10 ∧ C,E E 11 ∧ C 12 F 空 13 ∧ F F 14 ∧ 空
(2)中序遍历的非递归实现
中序遍历的非递归算法的实现,只需将先序遍历的非递归算法中的Visite(p-data)移到p=stack[top]和p=p-rchild之间即可。
(3)后序遍
您可能关注的文档
- 第6篇 PHOTOSHOP中的颜色彻底研究.ppt
- 第6篇 程序设计.ppt
- 第6篇 创建动画.ppt
- 第6篇 数据访问页.ppt
- 现代公司制度的内涵及国有公司改革方向 3.pdf
- 现代汉语选择问句法来源.pdf
- 从标签式趋同到内涵式多样_生态课堂研究的回顾及前瞻.pdf
- 第6篇 数据库设计.ppt
- 从过渡模式到目标模式——对陕西省农业社会化服务体系的调查及思考.pdf
- 第6篇 注册表安全10.ppt
- 浙江省临海市白云高级中学2025届高三历史3月月考试题.doc
- 云南拾谷县第一中学2024_2025学年高二物理上学期10月月考试题.doc
- 2025版高考生物总复习第13讲基因的分离定律教案苏教版.doc
- 湖北省黄石实验高中2024_2025学年高一历史下学期期末考试模拟卷.doc
- 通史版2025版高考历史大一轮复习专题七近代化的曲折发展__中日甲午战争至五四运动前4第4讲从维新思想到新文化运动课后达标检测含解析新人教版.doc
- 2024年高考数学考试大纲解读专题04导数及其应用含解析文.doc
- 河南省许汝平九校联盟2024_2025学年高一语文上学期期末考试试题扫描版无答案.doc
- 江西省吉安市吉水县第二中学2024_2025学年高一历史上学期第二次月考试题.doc
- 北京市平谷区2025届高三政治一模考试试题含解析.doc
- 2025届中考物理第四讲物态变化专项复习测试无答案新人教版.docx
最近下载
- 武汉理工大学《高等数学》2022-2023学年第一学期期末试卷及答案.docx
- 《企业财务会计》全套PPT课件.pptx
- 社会体育建设方案-专业教学资源库备选项目材料.pdf VIP
- 美的品牌案例分析.pptx VIP
- 美的案例分析.pptx VIP
- 小学生秋季学期第1-20周国旗下讲话稿(新).pdf
- 边做边学——Dreamweaver CS6网页设计案例教程(第3版)(共12单元)01.ppt VIP
- 武汉理工大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 清洁生产与循环经济( 第二版) 教学课件 作者 奚旦立徐淑红高春梅 主编 第4章 清洁生产.ppt
- 美的品牌案例分析.pptx VIP
文档评论(0)