Java数据结构二叉树深度递归调用算法求内部算法过程详解
答案:1 悬赏:60 手机版
解决时间 2021-11-17 08:52
- 提问者网友:寂寞梧桐
- 2021-11-17 01:39
Java数据结构二叉树深度递归调用算法求内部算法过程详解
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-11-17 02:23
二叉树
1
2 3
4 5 6 7
这个二叉树的深度是3,树的深度是最大结点所在的层,这里是3.
应该计算所有结点层数,选择最大的那个。
根据上面的二叉树代码,递归过程是:
f(1)=f(2)+1 > f(3) +1 ? f(2) + 1 : f(3) +1
f(2) 跟f(3)计算类似上面,要计算左右结点,然后取大者
所以计算顺序是f(4.left) = 0, f(4.right) = 0
f(4) = f(4.right) + 1 = 1
然后计算f(5.left) = 0,f(5.right) = 0
f(5) = f(5.right) + 1 =1
f(2) = f(5) + 1 =2
f(1.left) 计算完毕,计算f(1.right) f(3) 跟计算f(2)的过程一样。
得到f(3) = f(7) +1 = 2
f(1) = f(3) + 1 =3
if(depleft>depright){
return depleft+1;
}else{
return depright+1;
}只有left大于right的时候采取left +1,相等是取right
追问谢谢
那我一开始想的大致是对的罗?
为什么要用递归方法呢追答大致是对的。用递推代码比较简单吧,非递推需要借助其他数据结构来保存中间结果。
1
2 3
4 5 6 7
这个二叉树的深度是3,树的深度是最大结点所在的层,这里是3.
应该计算所有结点层数,选择最大的那个。
根据上面的二叉树代码,递归过程是:
f(1)=f(2)+1 > f(3) +1 ? f(2) + 1 : f(3) +1
f(2) 跟f(3)计算类似上面,要计算左右结点,然后取大者
所以计算顺序是f(4.left) = 0, f(4.right) = 0
f(4) = f(4.right) + 1 = 1
然后计算f(5.left) = 0,f(5.right) = 0
f(5) = f(5.right) + 1 =1
f(2) = f(5) + 1 =2
f(1.left) 计算完毕,计算f(1.right) f(3) 跟计算f(2)的过程一样。
得到f(3) = f(7) +1 = 2
f(1) = f(3) + 1 =3
if(depleft>depright){
return depleft+1;
}else{
return depright+1;
}只有left大于right的时候采取left +1,相等是取right
追问谢谢
那我一开始想的大致是对的罗?
为什么要用递归方法呢追答大致是对的。用递推代码比较简单吧,非递推需要借助其他数据结构来保存中间结果。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯