请各位帮我分析下二叉树中的栈

HuangRwen 2003-10-09 10:58:04
小弟初接触数据结构,请各位帮我分析下二叉树中数据出栈入栈的的过程,
以下面的中序遍历为例:

void Inorder(BinTree T)
{
if (T)
{ Inorder(T->lchild); // the left sub_tree
printf("%c", T->data); //access the Node
Inorder(T->rchild); // the right sub_tree
}
}
其中各结点的数据(T->data)从上到下从左到右为ABCDEF, 
希望能详细地说明下数据在栈中进栈出栈的过程,谢谢!!
...全文
61 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuangRwen 2003-10-11
  • 打赏
  • 举报
回复
谢谢几位!!!!
HuangRwen 2003-10-10
  • 打赏
  • 举报
回复
plainsong(短歌) 大哥上面分析的大概过程我也明白,
我想知道的是栈中的数据情况尤其是访问到NULL时
下一步的函数执行的情况,要不用下面的例子:

Size(BinTree T) //count the number of all the Nodes
{
if(T) return 0;
else return 1+Size(BinTree->lchild)+Size(BinTree->rchild);
}

请各位大哥帮忙分析下递归时栈中的内容和递归过程
howie 2003-10-10
  • 打赏
  • 举报
回复
A
AB
ABD
AB
A
C
CE
C
F
ZhangYv 2003-10-10
  • 打赏
  • 举报
回复
根据深度优先,遍历次序是 左(父亲节点)右
上面次序是:

DBAECF,根据你给出的程序很容易理解,用笔模拟一下过程
HuangRwen 2003-10-10
  • 打赏
  • 举报
回复
先谢谢!!
就用 plainsong(短歌) 所说的树也可:

  假设如下树(<>表示空):

A
B C
D <> E F
<> <> <> <> <> <>

短歌如风 2003-10-09
  • 打赏
  • 举报
回复
其中各结点的数据(T->data)从上到下从左到右为ABCDEF??不明白。

假设如下树(<>表示空):

A
B C
D <> E F
<> <> <> <> <> <>
执行顺序为:

Inorder A...
Inorder B...
Inorder D..
Inorder <>
Print D
Inorder <>
  End D..
Print B..
Inorder <>
End B..
Print A..
Inorder C..
Inorder E..
Inorder <>
Print E
Inorder <>
End E..
Print C
Inorder F..
Inorder <>
Print F
Inorder <>
End F..
End C..
End A..

结果输出为DBAECF

其中用Inorder X..表示用Inorder访问根为X的子树,用End X..表明这一访问结束。


33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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