【问题标题】:better way to find depth of a node in tree在树中查找节点深度的更好方法
【发布时间】:2014-01-21 21:25:06
【问题描述】:

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

我的问题是:

  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));

}

【问题讨论】:

    标签: java tree depth


    【解决方案1】:

    你的函数的顺序是 O(n)。

    在创建每个节点时将高度存储在它中,并在添加、删除和平衡树时保持该高度。

    【讨论】:

      【解决方案2】:

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

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

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

      • 当调用者请求深度并且dirty 为真时,调用您的函数来解决它,但将其存储到depth 并将dirty 设置为假。
      • 当调用者请求深度并且dirty为假时,只返回depth
      • 每当树的结构发生变化(插入或删除节点)时,将 dirty 设置为 true。

      【讨论】:

      • 本质上是实现缓存。
      【解决方案3】:
      1. 是的,您的代码是 O(n),因为在最坏的情况下,您会调用根节点上的高度(然后您必须接触每个节点才能找到到叶子的最长路径)。
      2. TTS 的代码和你的一样,我认为没有更快的方法。

      【讨论】:

        【解决方案4】:

        嗯,我看到你的问题要求深度,代码是找到节点的高度。

        我不太确定,你想要什么高度或深度。如果您需要代码的深度,这不是方法。见下文:

        Depth (n) = 1 + Depth(P(n)) 
        

        是深度的递归定义。

        关于身高,你写的是正确的。

        检查Tree Operations,我已经用它们的渐近分析为树上的大多数操作编写了它

        【讨论】:

        • 我知道它已经过时了,但我也抓到了和 'dharam' 一样的东西。问题是计算深度,但提供的解决方案返回高度,而不是深度。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多