1 / 12
文档名称:

树的遍历(递归和非递归).docx

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

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

分享

预览

树的遍历(递归和非递归).docx

上传人:iris028 2020/6/3 文件大小:124 KB

下载得到文件列表

树的遍历(递归和非递归).docx

相关文档

文档介绍

文档介绍:二叉树的遍历一、设计思想二叉树的遍历分为三种方式,分别是先序遍历,中序遍历和后序遍历。先序遍历实现的顺序是:根左右,中序遍历实现的是:左根右,后续遍历实现的是:左右根。根据不同的算法分,又分为递归遍历和非递归遍历。递归算法::先序遍历就是首先判断根结点是否为空,为空则停止遍历,不为空则将左子作为新的根结点重新进行上述判断,左子遍历结束后,再将右子作为根结点判断,直至结束。到达每一个结点时,打印该结点数据,即得先序遍历结果。:中序遍历是首先判断该结点是否为空,为空则结束,不为空则将左子作为根结点再进行判断,打印左子,然后打印二叉树的根结点,最后再将右子作为参数进行判断,打印右子,直至结束。:指针到达一个结点时,判断该结点是否为空,为空则停止遍历,不为空则将左子作为新的结点参数进行判断,打印左子。左子判断完成后,将右子作为结点参数传入判断,打印右子。左右子判断完成后打印根结点。非递归算法::首先建立一个栈,当指针到达根结点时,打印根结点,判断根结点是否有左子和右子。有左子和右子的话就打印左子同时将右子入栈,将左子作为新的根结点进行判断,方法同上。若当前结点没有左子,则直接将右子打印,同时将右子作为新的根结点判断。若当前结点没有右子,则打印左子,同时将左子作为新的根结点判断。若当前结点既没有左子也没有右子,则当前结点为叶子结点,此时将从栈中出栈一个元素,作为当前的根结点,打印结点元素,同时将当前结点同样按上述方法判断,依次进行。直至当前结点的左右子都为空,且栈为空时,遍历结束。:首先建立一个栈,定义一个常量flag(flag为0或者1),用flag记录结点的左子是否去过,没有去过为0,去过为1,,将根结点入栈,然后将指针指向左子,左子作为新的结点,将新结点入栈,然后再将指针指向当前结点的左子,直至左子为空,则指针返回,flag置1,出栈一个元素,作为当前结点,打印该结点,然后判断flag,flag为1则将指针指向当前结点右子,将右子作为新的结点,结点入栈,再次进行上面的判断,直至当前结点右子也为空,则再出栈一个元素作为当前结点,一直到结束,使得当前结点右子为空,且栈空,遍历结束。:首先建立两个栈,然后定义两个常量。第一个为status,取值为0,1,,1代表去过左子,2,代表左右子都去过,默认为0。第二个常量为flag,取值为0或者1,0代表进左栈,1代表进右栈。初始时指针指向根结点,判断根结点是否有左子,有左子则,将根结点入左栈,status置0,flag置0,若没有左子则判断结点有没有右子,有右子就把结点入右栈,status置0,flag置1,若左右子都没有,则打印该结点,并将指针指向空,此时判断flag,若flag为0,则从左栈出栈一个元素作为当前结点,重新判断;若flag为1则从右栈出栈一个元素作为当前结点,重新判断左右子是否去过,若status为1,则判断该结点有没有右子,若有右子,则将该结点入右栈,status置1,flag置1,若没有右子,则打印当前结点,并将指针置空,然后再次判断flag。若当前结点status为2,且栈为空,则遍历结束。若指针指向了左子,则将左子作为当前结点,判断其左右子情况,按上述方法处理,直至遍历结束。二、算法流程图图1二叉树的建立用先序方法建立二叉树,为每个结点定义左右子,用0代表空,得到上述二叉树图2非递归二叉树遍历先序首先建立一个栈,当指针到达根结点时,打印根结点,判断根结点是否有左子和右子。有左子和右子的话就打印左子同时将右子入栈,将左子作为新的根结点进行判断,方法同上。若当前结点没有左子,则直接将右子打印,同时将右子作为新的根结点判断。若当前结点没有右子,则打印左子,同时将左子作为新的根结点判断。若当前结点既没有左子也没有右子,则当前结点为叶子结点,此时将从栈中出栈一个元素,作为当前的根结点,打印结点元素,同时将当前结点同样按上述方法判断,依次进行。直至当前结点的左右子都为空,且栈为空时,遍历结束。图3非递归二叉树遍历中序中序遍历:首先建立一个栈,定义一个常量flag(flag为0或者1),用flag记录结点的左子是否去过,没有去过为0,去过为1,,将根结点入栈,然后将指针指向左子,左子作为新的结点,将新结点入栈,然后再将指针指向当前结点的左子,直至左子为空,则指针返回,flag置1,出栈一个元素,作为当前结点,打印该结点,然后判断flag,flag为1则将指针指向当前结点右子,将右子作为新的结点,结点入栈,再次进行上面的判断,直至当前结点右子也为空,则再出栈一个元素作为当前结点,一直到结束,使得当前结点右子为空,且栈空,遍历结束

最近更新

2024年云南省临沧地区单招职业适应性测试题库.. 43页

2024年保定电力职业技术学院单招职业倾向性考.. 56页

2024年兴安职业技术学院单招职业技能考试题库.. 54页

2024年包头轻工职业技术学院单招综合素质考试.. 57页

2024年南宁职业技术学院单招职业倾向性考试必.. 58页

2024年厦门软件职业技术学院单招综合素质考试.. 54页

2024年吉林省白城市单招职业适应性测试必刷测.. 55页

2024年哈尔滨职业技术学院单招职业技能测试必.. 56页

2024年山西水利职业技术学院单招职业倾向性考.. 57页

企业战略峰会2025黑金质感颁 26页

全国土地日珍惜土地资源动态PPT模板 26页

创业融资计划书PPT模板 22页

制造业员工技能培训体系与绩效考核标准更新方.. 29页

医疗健康领域二零二五年度杰出贡献颁奖盛典全.. 26页

卡通风医疗垃圾分类及处理齐心协力共创城市美.. 28页

基于2025膳食指南的幼儿园餐点分配与保育配合.. 21页

基于二零二五战略目标的部门月度经营数据分析.. 26页

基于云端数据的垃圾分类实时监测系统设计(二.. 26页

基于可持续发展理念的2025年城市建筑更新方案.. 31页

基于智能家居场景的移动互联网工作汇报PPT模板.. 32页

地理研讨会专业知识讲座公开课一等奖优质课大.. 51页

多维度审计视角下项目管理合规性总结报告二零.. 33页

体彩店创业计划书 7页

工厂急救箱方案 3页

水泥土换填施工方案 12页

五年级《跑——折返跑》教学设计 7页

低温液体泵工艺及安全操作规程 3页

最新正常分娩(9版妇产科学课件) 40页

某乘用车转向柱助力式转向系统设计含CAD图纸、.. 38页

关于进一步做好回迁安置和不动产权证办理工作.. 5页