当前位置: 首页 > 知识库问答 >
问题:

确定平衡二叉树的蛮力算法的运行时间复杂度

申光临
2023-03-14

我有以下代码用于暴力方法,以确定二叉树是否平衡:

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(max depth(root . left)-max depth(root . right))行

共有1个答案

章松
2023-03-14

在第一次调用倾斜树时的方法IsBalance(Node root)

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

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

< code>maxDepth(root.left)现在进行n-1次,以此类推,所以时间复杂度是

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

 类似资料:
  • 如果二叉树是平衡的,那么二叉搜索的最佳运行时间是O(log(n))。最坏的情况是,如果二叉树非常不平衡,它基本上表示一个链表。在这种情况下,二进制搜索的运行时间将为O(n)。 但是,如果树只是稍微不平衡,就像这棵树的情况一样: 如果我没记错的话,最好的情况仍然是O(log n)。但是最坏的情况是什么?

  • 我已经知道,如果您尝试查找具有特定键的项目,最坏情况下的运行时间是O(n),。如果您试图搜索特定的数据项(您不知道该键),那么最坏情况下的运行时间是O(n)。然而,如果键和数据都是整数,输入项在插入之前被随机置乱,会怎么样。最糟糕的运行时间还会保持不变吗?

  • 下面是我写的一些伪代码,给定一个数组A和一个整数值k,如果与k之和中有两个不同的整数,则返回true,否则返回false。我正试图确定这个算法的时间复杂度。 我猜这个算法在最坏的情况下的复杂度是O(n^2)。这是因为第一个for循环运行n次,该循环内的for循环也运行n次。if语句进行一次比较,如果为true,则返回一个值,这两个操作都是常量时间操作。最后的return语句也是一个常数时间操作。

  • 主要内容:二叉排序树转化为平衡二叉树,构建平衡二叉树的代码实现,总结上一节介绍如何使用二叉排序树实现动态 查找表,本节介绍另外一种实现方式—— 平衡二叉树。 平衡二叉树,又称为  AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是在二叉树的基础上,若树中每棵子树都满足其左子树和右子树的深度差都不超过 1,则这棵二叉树就是平衡二叉树。 图 1 平衡与不平衡的二叉树及结点的

  • 所以,我一直在研究平衡的二叉查找树。 我谷歌了一下,这是我的发现: 二叉树,其中每个节点的两个子树的深度相差 1 或更小(来自维基百科) 难道就不能把平衡二叉树定义为高度不超过ceil(log(n ^ 1)/log ^ 2)的树吗? 从这个答案来看,提问者似乎已经问了同样的事情,但是公认的答案通过举斐波纳契树的例子拒绝了这个想法。斐波纳契树不是平衡树,对吗?我认为回答者可能会与AVL树中平衡树的定

  • NowCoder 题目描述 平衡二叉树左右子树高度差不超过 1。 解题思路 // java private boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { height(root); return isBalanced; } private int height(Tre