1 / 19
文档名称:

二叉树遍历的非递归实现.doc

格式:doc   大小:107KB   页数:19页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

二叉树遍历的非递归实现.doc

上传人:iluyuw9 2019/8/1 文件大小:107 KB

下载得到文件列表

二叉树遍历的非递归实现.doc

文档介绍

文档介绍:二叉树遍历的非递归实现二叉树遍历的非递归实现前面给出的二叉树先序、中序和后序三种遍历算法都是递归算法。当给出二叉树的链式存储结构以后,用具有递归功能的程序设计语言很方便就能实现上述算法。然而,并非所有程序设计语言都允许递归;另一方面,递归程序虽然简洁,但可读性一般不好,执行效率也不高。因此,就存在如何把一个递归算法转化为非递归算法的问题。解决这个问题的方法可以通过对三种遍历方法的实质过程的分析得到。(b)所示的二叉树,对其进行先序、中序和后序遍历都是从根结点A开始的,且在遍历过程中经过结点的路线是一样的,只是访问的时机不同而已。,由根结点右外侧结束的曲线,(b)的路线。沿着该路线按△标记的结点读得的序列为先序序列,按*标记读得的序列为中序序列,按⊕标记读得的序列为后序序列。然而,这一路线正是从根结点开始沿左子树深入下去,当深入到最左端,无法再深入下去时,则返回,再逐一进入刚才深入时遇到结点的右子树,再进行如此的深入和返回,直到最后从根结点的右子树返回到根结点为止。先序遍历是在深入时遇到结点就访问,中序遍历是在从左子树返回时遇到结点访问,后序遍历是在从右子树返回时遇到结点访问。⊕△A*△⊕△CB⊕**△⊕⊕△△DFE⊕***⊕G*△(b)的路线示意图在这一过程中,返回结点的顺序与深入结点的顺序相反,即后深入先返回,正好符合栈结构后进先出的特点。因此,可以用栈来帮助实现这一遍历路线。其过程如下。在沿左子树深入时,深入一个结点入栈一个结点,若为先序遍历,则在入栈之前访问之;当沿左分支深入不下去时,则返回,即从堆栈中弹出前面压入的结点,若为中序遍历,则此时访问该结点,然后从该结点的右子树继续深入;若为后序遍历,则将此结点再次入栈,然后从该结点的右子树继续深入,与前面类同,仍为深入一个结点入栈一个结点,深入不下去再返回,直到第二次从栈里弹出该结点,才访问之。(1)先序遍历的非递归实现在下面算法中,二叉树以二叉链表存放,一维数组stack[MAXNODE]用以实现栈,变量top用来表示当前栈顶的位置。voidNRPreOrder(BiTreebt){/*非递归先序遍历二叉树*/BiTreestack[MAXNODE],p;inttop;if(bt==NULL)return;top=0;p=bt;while(!(p==NULL&&top==0)){while(p!=NULL){Visite(p->data);/*访问结点的数据域*/if(top<MAXNODE-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的右孩子结点*/}}}(b)所示的二叉树,用该算法进行遍历过程中,。,BB3∧A,B,DD4GA,B5∧A,B,GG6∧A,B7∧10∧C,EE11∧C12F空13∧FF14∧空(2)中序遍历的非递归实现中序遍历的非递归算法的实现,只需将先序遍历的非递归算法中的Visite(p->data)移到p=stack[top]和p=p->rchild之间即可。(3)后序遍历的非递归实现由前面的讨论可知,后序遍历与先序遍历和中序遍历不同,在后序遍历过程中,结点在第一次出栈后,还需再次入栈,也就是说,结点要入两次栈,出两次栈,而访问结点是在第二次出栈时访问。因此,为了区别同一个结点指针的两次出栈,设置一标志flag,令:{1第一次出栈,结点不能访问2第二次出栈,结点可以访问flag=当结点指针进、出栈时,其标志flag也同时进、出栈。因此,可将栈中元素的数据类型定义为指针和标志flag合并的结构体类型。定义如下:typedefstruct{BiTreelink;intflag;}stacktype;后序遍历二叉树的非递归算法如下。在算法中,一维数组stack[MAXNODE]用于实现栈的结构,指针变量p指向当前要处理的结点,整型变量top用来表示当前栈顶的位置,整型变量sign为结点p的标志量。voidNRPostOrder(BiTreebt)/*非递归后序遍历二叉树bt*/{stacktypestack[MAXNODE];BiTreep;intto

最近更新

2025年泰康人寿绿色保险数据可视化年度汇报PP.. 21页

2025年紫色卡通手绘风中小学 28页

氨泄漏、中毒事故现场处置预案 18页

职称遴选方案 33页

2025年非物质文化遗产春祭典礼演示文档 27页

2018年科学组下半年教研活动工作计划范文与20.. 11页

2018年第一季度财务部工作总结范文与2018年第.. 7页

2018年继续教育培训个人心得总结范文与2018年.. 5页

2018年行政助理年度个人总结范文怎么写与2018.. 6页

2018年财务会计年度工作总结与2018年财务会计.. 4页

2018年财务部主管工作总结与2018年财务部会计.. 4页

2018年银行主管竞聘演讲稿与2018年银行副行长.. 7页

2018年门诊支部半年总结范文与2018年阅览室年.. 4页

2018幼儿园中班秋季学期教学工作计划范文与20.. 8页

2018幼儿园工会工作总结范文与2018幼儿园工会.. 8页

2018幼儿园教师工作总结4篇与2018幼儿园教师工.. 17页

2018幼儿园老师个人工作总结 5页

2018旅行社年终工作总结与2018景区导游年度工.. 9页

2018有关信用社会计的工作计划范文与2018有关.. 7页

2018版幼儿园保育员四级业务能力考试试题试卷.. 10页

2018版幼儿园小班保育员四级业务水平考试试题.. 11页

2018生产车间年终工作总结报告与2018生产部年.. 15页

2018社区基层党校工作总结范文与2018社区妇联.. 7页

2018经典出纳半年工作总结与2018经济局党员发.. 4页

初中英语2025届中考核心高频词(词义+音标+考.. 17页

一元一次不等式及一元一次不等式组复习课公开.. 22页

天津市建设工程计价办法 22页

园林绿化工程施工及验收规范CJJ82-2012表格 29页

郭德纲、于谦 学电台 台词 13页

保险需求分析表 4页