我有以下蛮力方法的代码来确定二叉树是否平衡:
public boolean IsBalanced(Node root)
{
if (root == null) return true;
return Math.abs(maxDepth(root.left) - maxDepth(root.right)) <= 1
&& IsBalanced(root.left)
&& IsBalanced(root.right)
}
public int maxDepth(Node root)
{
if (root == null) return 0;
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
}
当树是偏斜的树时,我不明白为什么最坏的情况运行时复杂度为O(n ^ 2)。我认为如果树是倾斜的,那么就是线 Math.abs(maxDepth(root.left) - maxDepth(root.right))&lt; = 1 会立即发现根的左子树的高度比根的右子树的高度多1倍。然后,偏斜树案例的时间复杂度应为O(n)。我在这里错过了什么?谢谢!
答案 0 :(得分:1)
首次调用
时偏斜树的方法IsBalanced(Node root)
maxDepth(root.left)
它需要maxDepth(root)
中的n个递归调用,现在仍然是
root在IsBalanced(Node root)
中不为空,然后又调用
maxDepth(root.left)
现在n-1次等等。所以时间复杂度是
前n个自然数,即O(n ^ 2)。