迭代函数的函数栈问题

pengzhixi 2009-06-04 10:04:32
象二叉书遍历问题
比如:
void inorder(ostream&out,Tree*root)
{
if(root!=0)
{
inorder(out,root->left);
out<<root->data;
inorder(out,root->right);
}
}
我想问下这个迭代函数的函数栈到底是什么样的?因为如果里面只有inorder(out,root->left);我还好理解,但是加了个inorder(out,root->right);我就不太清楚这个函数栈是什么样的.
...全文
109 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2009-06-05
  • 打赏
  • 举报
回复
---------         ---------         ---------------------------------
| | | |
| | | |
| | | |
----------- ---------
beackoom 2009-06-05
  • 打赏
  • 举报
回复
去数据结构看看中序遍历,对你理解这个函数有帮助,先输出做子树,再输出中间节点,再输出又子树
wanglchr 2009-06-05
  • 打赏
  • 举报
回复
支持楼上的,你可以用个深度不是很大的二叉树画画图模拟一下,会帮助你理解的!
hjjdebug 2009-06-05
  • 打赏
  • 举报
回复
假定你的两叉树是一个完整的两叉数,共10层,金字塔结构。
先递归到最底层(第10层左支第一片叶子),然后退一层到9层(第一片叶子),再到第10层右支(第2片叶子)。
然后退到第8层打扫房间(第一片叶子),再深入到10层左支(第三个叶子)打扫房间,退到9层(第二片叶子)
再到10层右支第4片叶子,再到7层第一片叶子,再到10层第5片叶子 ....
自己画个两叉树图。就清楚了。

可以知道它的堆栈是忽而深,忽而浅,反反复复。但其最深不超过10层。
goodname 2009-06-05
  • 打赏
  • 举报
回复
有些象3楼给的图,但是应该可能是高低不等的,这要视二叉树的具体构成而定。
  • 打赏
  • 举报
回复
唉,不就是个中序吗。
你把迭代也看成函数调用就是了。
lylm 2009-06-04
  • 打赏
  • 举报
回复
粗浅的说,应该就是递归访问左子树,根据函数调用,依次进栈,到叶子节点时,栈弹出,到上级函数,然后打印当前节点,再转移到右子树,类似。等高手

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧