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

确定一个自平衡二叉树高度公式,知道它的节点数

苏建安
2023-03-14

我一直在努力确定自平衡二叉树的高度,知道它的节点数(N),我得出了以下公式:

高度=ceilling[log2(N1)],其中ceilling[x]是不小于x的最小整数。

问题是我在网上找不到这个公式,而且它看起来相当准确。

>

  • 在自平衡二叉树的情况下,这个公式会失败吗?

    那么,确定树的高度的一般公式是什么?

  • 共有1个答案

    蔡鹏程
    2023-03-14

    维基百科的自平衡二叉查找树文章中有一个公式。

    h >= ceilling(log2(n+1) - 1) >= floor(log2(n))
    

    最小高度为地板(log2(n))。然而值得注意的是

    最简单的BST项插入算法可能会在相当常见的情况下生成高度为n的树。例如,当项目按排序键顺序插入时,树将退化为具有n个节点的链表。

    因此,您的公式与“良好近似”公式相差不远(仅差1),但考虑到nlog2(n)之间可能存在相当大的范围。

     类似资料:
    • 参考这个问题的答案 平衡二叉树是: 左子树和右子树的高度最多相差一个,并且 左子树是平衡的,并且 右边的子树是平衡的 现在,用同样的例子 树的根在A. 现在,在查看高度平衡树的定义时,第一点表示: > 左右子树的高度最多相差一个 如果我当前位于节点A,要确定A左子树的高度,如果我计算: 从A(D)或 如果我当前位于节点A,为了确定A的右子树的高度,如果我计算: 从A(F)或 节点C从A(扩展名C)

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

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

    • 排序二叉树中存在一个问题就是可能会退化成一个链表,当只有左子树或者右子树有节点的时候,此时排序二叉树就像链表一样,但因为排序二叉树在插入查询的时候还要判断左右子树的问题,这样查询的效率反而变低,从而引出了平衡二叉树 平衡二叉树又称平衡搜索树(Self-balance Binary Search Tree)又称AVL树,同时保证了查询和添加的效率。首先平衡二叉树是一颗排序二叉树,且它是空树或者他的每

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

    • 我曾试图实现代码来实现平衡二叉搜索树的方式(蛮力),我发现有一个案例(树),似乎无法平衡。这棵树是 你可以明显地发现,这棵树的右边高度比它的左边高度大得多,所以我绕着'6'向左旋转,那么新树就会 然后,左边的高度比右边的高度大得多,所以在下一步中,我必须围绕节点“10”向右(返回)旋转树。 似乎必须有一个无限循环来旋转这棵树围绕它的根节点(旋转左、右、左、右……以此类推),同时平衡这棵树。平衡这棵