平衡二叉树代码的时间复杂度

时间:2014-04-01 07:18:26

标签: recursion

public boolean isBalanced(TreeNode root) {
    if (root == null) return true;

    int left = getHeight(root.left);
    int right = getHeight(root.right);
    if (Math.abs(left - right) > 1) return false;

    return isBalanced(root.left) && isBalanced(root.right);
}

private int getHeight(TreeNode n) {
    if (n == null) return 0;

    return Math.max(getHeight(n.left), getHeight(n.right)) + 1;
}

这是来自leetcode http://discuss.leetcode.com/questions/276/balanced-binary-tree的代码 因为讨论在那里关闭。我只是想问为什么他们说这个代码时间复杂度是nlogn而不是O(n) 感谢

1 个答案:

答案 0 :(得分:0)

显然getHeight()的复杂性是O(logn)。在isBalanced()中,它是一个递归函数,它将在O(n)的复杂度下遍历树,而在每个节点处它调用getHeight()函数。所以总复杂度是O(nlogn)。