求二叉树深度的递归算法,看不太懂

asenpal 2010-05-13 12:54:26
int depth(btree *b)
{ int dep1,dep 2;
if (b==NULL) return 0;
else
{ dep1=dep1(b->left);
dep2=dep2(b->right);
if(dep1>dep2) return dep1+1;
else return dep2+1 ;

}
}


我怎么感觉递归完后dep1和dep2都是0啊
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FU0_0BIN 2011-11-10
  • 打赏
  • 举报
回复
1L,写的太好了,谢谢
asenpal 2010-05-13
  • 打赏
  • 举报
回复
谢谢1L. 写这么详细我终于看懂了
xhd3767 2010-05-13
  • 打赏
  • 举报
回复
楼上太夸张了吧..写这么详细!
huanmie_09 2010-05-13
  • 打赏
  • 举报
回复

如果一棵树的结果如下:
a ---root
b c
e

模拟递归过程:
depth(root)
root不为空,
第一层执行语句1:
dep1 = (root->left);

第一层调用执行depth(root->left);
进入第二层
root->left不为空,
第二层执行语句1:
dep1 = depth(root->left->left);
root->left->left为空, 返回0.
第二层执行语句2:
dep2 = depth(root->left->right);
root->left->right为空, 返回0.
第二层执行语句3:
比较dep1和dep2大小,返回else语句部分return dep2+1;即返回0+1 = 1.
第二层调用结束.返回值为1.
这里得到第一层的dep1=1;

第一层执行语句2:
dep2 = (root->right);
第一层调用执行depth(root->right);
进入第二层
root->right不为空,
第二层执行语句1:
dep1 = depth(root->right->left);
root->left->left为空, 返回0.
第二层执行语句2:
dep2 = depth(root->right->right);
root->left->right不为空,
进入第三层,
depth(root->right->right);
第三层执行语句1:
dep1 = depth(root->right->right->left);
root->right->right->left为空, 返回0.
第三层执行语句2:
dep2 = depth(root->right->right->right);
root->right->right->right为空, 返回0.
第三层执行语句3:
比较dep1和dep2大小,返回else语句部分return dep2+1;即返回0+1 = 1.
第三层调用结束.返回值为1.
这里得到第二层的dep2=1;
第二层执行语句3:
比较dep1和dep2大小,返回else语句部分return dep2+1;即返回1+1 = 2.
第二层调用结束.返回值为2.
这里得到第一层的dep2=2;

比较第一层中的dep1和dep2,执行else语句部分, return dep2+1;即返回2+1=3;
第一层调用结束,返回值为3.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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