用于确定平衡二叉树的蛮力的运行时复杂性

时间:2015-05-28 05:57:29

标签: binary-tree time-complexity

我有以下蛮力方法的代码来确定二叉树是否平衡:

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)。我在这里错过了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

首次调用

时偏斜树的方法IsBalanced(Node root)

maxDepth(root.left)它需要maxDepth(root)中的n个递归调用,现在仍然是

root在IsBalanced(Node root)中不为空,然后又调用

maxDepth(root.left)现在n-1次等等。所以时间复杂度是

的总和

前n个自然数,即O(n ^ 2)。