迭代函数的函数栈问题

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);我就不太清楚这个函数栈是什么样的.
...全文
65 点赞 收藏 8
写回复
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
粗浅的说,应该就是递归访问左子树,根据函数调用,依次进栈,到叶子节点时,栈弹出,到上级函数,然后打印当前节点,再转移到右子树,类似。等高手
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告