郁闷??,左孩子右兄弟为存储结构的树怎样求其深度?急

drmao 2003-12-15 02:27:31
一个考研题,左孩子右兄弟为存储结构的树怎样求其深度?
...全文
505 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolei1128 2003-12-26
  • 打赏
  • 举报
回复
好好学习----------
zachary7833 2003-12-25
  • 打赏
  • 举报
回复
学习!!!我们老师没教左孩子右兄弟为存储结构的树
tudou614 2003-12-24
  • 打赏
  • 举报
回复
短歌功力好强,向短歌学习!

帮我看看这个用什么好!!!
drmao 2003-12-18
  • 打赏
  • 举报
回复
看懂了,太感谢了。
drmao 2003-12-18
  • 打赏
  • 举报
回复
thanks.
短歌如风 2003-12-15
  • 打赏
  • 举报
回复
int Max(int a, int b)
{
return a > b?a:b;
}
int LMR(struct TreeNode* Node)
{
if(Node == NULL)
return 0;
else
return Max(LMR(Node->left) + 1, LMR(Node->right));
}

这段代码其实不是求树的深度,而是求森林的深度。因为树可以看成是只有一棵树的森林,所以也可以用。

森林的深度是所有树的深度最大值,而树的深度就是子树林的深度加1。因此,森林的深度就是:
Max(第一树的子树林深度+1,第一棵树的兄弟树林的深度)
而二叉树表示的森林恰好是左节点是第一棵子树的根,右节点是下一个兄弟。如果把它看成是用右节表示的链表,左节点就成了子树林。
这段代码也可以这样写:
int LMR(struct TreeNode* Node)
{
if(Node == NULL)
return 0;
else
{
int Result = LMR(Node->child) +1;//child即left
Node = Node->brother;//brother即right
while (Node != NULL)
{
Result = Max(LMR(Node->child) +1, Result);
Node = Node -> brother;
}
return Result;
}
}
一个是双递归,一个是单递归加循环,道理都是一样的。
drmao 2003-12-15
  • 打赏
  • 举报
回复
更加郁闷了。
一点也看懂,请问有没有C语言的,能不能讲解一下。小弟感激ing
SoftWare1999 2003-12-15
  • 打赏
  • 举报
回复

int LMR(Node)
{
if Node==NULL then LMR=0
else LMR=Max(LMR(Node.Left)+1,LMR(Node.right))
}

33,027

社区成员

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

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