我想计算树的深度 我在下面写了代码
我的问题是:
提前致谢
public int height(Node n)
{
if(n == null)
return 0;
return 1 + Math.max(height(n.left), height(n.right));
}
答案 0 :(得分:3)
它是O(n),无论您拥有什么类型的树,因为您访问每个节点以确定最大深度。
唯一更有效的方法是在某处存储有关树的额外信息。如果它是平衡的,则根据节点数知道最大高度。
或者,您可以缓存信息。有两个额外变量depth
和dirty
,最初将dirty
设置为true:
dirty
为真时,请调用您的函数将其解析,但将商店调入depth
并将dirty
设置为false。dirty
为假时,只需返回depth
。dirty
设置为true。答案 1 :(得分:1)
你的功能顺序是O(n)。
在创建时将高度存储在每个节点中,并在添加,删除和平衡树时保持该高度。
答案 2 :(得分:1)
好吧,我看到你的问题要求深度,代码就是找到节点的高度。
我不确定,你想要什么样的高度或深度。如果您需要深度代码,则不是这样。见下文:
Depth (n) = 1 + Depth(P(n))
是深度的递归定义。
对于身高,你写的是正确的。
检查Tree Operations,我已经为树上的大多数操作编写了渐近分析
答案 3 :(得分:0)