java - 找到树中节点深度的更好方法

标签 java tree depth

我想计算树的深度 我在下面写了代码

我的问题是:

  1. 这段代码的顺序是什么?是O(n)吗[n是树节点数]
  2. 您认为还有其他更好更快的方法吗?

提前致谢

public int height(Node n)
{
    if(n == null)
        return 0;
    return 1 + Math.max(height(n.left), height(n.right));

}

最佳答案

无论您拥有什么类型的树,它的复杂度都是 O(n),因为您要访问每个节点来建立最大深度。

唯一更有效的方法是将有关树的额外信息存储在某处。如果它是平衡的,您就可以根据节点数量知道最大高度。

或者,您可以缓存该信息。有两个额外的变量 depthdirty 并最初将 dirty 设置为 true:

  • 当调用者请求深度并且 dirty 为 true 时,调用您的函数来计算它,但将其存储到 深度 中并设置 dirty > 为假。
  • 当调用者请求深度且 dirty 为 false 时,只需返回深度
  • 每当树的结构发生更改(插入或删除节点)时,请将 dirty 设置为 true。

关于java - 找到树中节点深度的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20916686/

相关文章:

java - Spring框架如何 Autowiring 一个集合

java - Intent 不起作用,单击按钮2时,应用程序崩溃

c++ - 我的 Prim 算法 (MST) 在矩阵中的运行速度比在列表中快得多

c# - 从树中删除重复项

haskell - 在 Haskell 中删除具有特定 Int 的树叶

Java Netty - 根据输入消息将结果作为 StringEncoder 或 ObjectEncoder 发送到客户端?

java - Android API 2.2.1 是否过时而无法使用?

javascript - d3.js - 确定嵌套深度(或 child 的 child )

opengl - 如何将 OpenGL 正交投影与深度缓冲区一起使用?

python - Python 中二叉搜索树的深度