搜索

这个C++递归程序是怎样执行的能不能帮我写一下步奏可以给分

gecimao 发表于 2019-08-10 13:48 | 查看: | 回复:

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  推荐于2016-11-15展开全部一,大循环中的第一个循环,当前节点一直往左走一直走到头,并且把走过的节点压栈,这个循环遍历完成后,栈里面都是左边走过但是右边还没有走过的节点

  二,从最左边那个没有更左的那个节点,它位于栈顶,因为这时栈顶不是一个右节点,第二个循环跳过,然后把栈顶结点的右节点标记为r并以此作为根节点重复之前的操作

  因为一直往下层走,总会遇到既没有左节点有没有右节点的节点,就是叶子节点,就开始往回退 取他的右节点,取之前会把该节点标记为r,但是他没有右节点,为null,就会跳过第一个循环,来到第二个,那么这个叶子就从栈中pop掉,新的栈顶结点是那个叶子的父节点,如果没有右节点,那他就成了叶子,更简单,如果有右节点,那么继续二

  第一个函数就是第一个小循环,只走左边,然后把新得到的节点作为根节点,继续调用第一个函数,得到左节点,然后再作为根节点,直到左节点为空;

  第二个函数就是最后一个if,非递归算法中是从栈顶取,就是左边走过了的节点,相当于递归中,第一个函数执行完已经返回,然后取他的右节点作为根节点,继续递归

  两个都执行完就输出他们的父节点追问这个循环结点怎样取出到栈的追答什么意思?你画二叉树按照后序遍历方式用线连一遍写下节点序号可能好理解一点,离散数学有重点讲这个

本文链接:http://windsorflowers.net/diguilicheng/424.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部