代码之家  ›  专栏  ›  技术社区  ›  SpaceShroomies

无法理解TreeNode中的Big-O

  •  2
  • SpaceShroomies  · 技术社区  · 10 年前

    我很难理解大O问题。

    问题

    public boolean isHB(TreeNode root){
        if (root==null)
            return tree;
        int heightL = height(root.left);
        int heightR = height(root.right);
        boolean leftHB = isHB(root.left);
        boolean rightHB = isHB(root.right);
        if (Math.abs(heightL-heightR)>1)
            return false;
        return leftHB && rightHB;
    }
    

    1/假设树高度平衡。找到大O,其中n是树中节点的数量。

    2/不要假设树高度平衡。找到大O,其中n是树中节点的数量。

    我不明白的

    1/解为:2T(2/n)+O(n)=O(n log(n))。我知道2T(2/n)来自何处,但我不知道O(n)来自哪里。

    2/解为:T(n-1)+O(n)=O(n^2)。在这种情况下,由于树是不平衡的,我理解t(n-1),但我仍然无法确定O(n)来自何处。

    1 回复  |  直到 10 年前
        1
  •  2
  •   stinepike    10 年前

    查找树的高度具有复杂性O(n)。因此,额外的部分是计算高度的复杂性。