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

Recursion 平衡二叉树码的时间复杂度,recursion,Recursion,这是leetcode中的代码 因为讨论到此结束。我只是想问为什么他们说这个代码的时间复杂度是nlogn而不是O(n) 感谢显然getHeight()的复杂性是O(logn)。在isBalanced()中,它是一个递归函数,将以O(n)的复杂度遍历树一次,同时在每个节点调用getHeight()函数。所以总的复杂度是O(nlogn)。检查这个,因为getHeight不是O(1) public boolean isBalanced(TreeNode root) { if (root == n

这是leetcode中的代码 因为讨论到此结束。我只是想问为什么他们说这个代码的时间复杂度是nlogn而不是O(n)
感谢显然
getHeight()的复杂性是O(logn)。在
isBalanced()
中,它是一个递归函数,将以O(n)的复杂度遍历树一次,同时在每个节点调用
getHeight()
函数。所以总的复杂度是O(nlogn)。

检查这个,因为getHeight不是O(1)
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;
}