在给定一定数量的节点的情况下,是否有公式来计算AVL树的最大和最小高度?
例如:
教科书问题:
3个节点,5个节点和7个节点的AVL树的最大/最小高度是多少?
教科书答案:
3个节点的AVL树的最大/最小高度为2/2,5个节点的最大/最小高度为3/3,7个节点的最大/最小高度为4/3
我不知道他们是否通过一些神奇的公式计算出来,或者他们是否为每个给定的高度绘制了AVL树并确定了这一点。
答案 0 :(得分:13)
以下解决方案适合手工处理并获得直觉,请参阅本答案底部的确切公式,了解更大的树木(54个以上节点)。
最小高度很容易,只需用节点填充树的每个级别,直到用完为止。那个高度是最低的。
要找到最大值,请执行与最小值相同的操作,但然后返回一步(删除最后放置的节点)并查看是否将该节点添加到相反的子树(从它刚才的位置)违反了AVL树属性。如果是这样,您的最大高度就是您的最小高度。否则,这个新高度(应该是最小高度+ 1)是你的最大高度。
如果您需要概述AVL树的属性,或者只是AVL树的一般说明,Wikipedia is a great place to start.
让我们以7节点为例。你填写所有级别并找到一个完全填充的高度为3的树。(1级为1,级别2为2,级别为3级.1 + 2 + 4 = 7个节点。)这意味着3是您的最小值。
现在找到最大值。删除最后一个节点并将其放在左侧子树而不是右侧。右子树仍然具有高度3,但左子树现在具有高度4.然而,这些值相差小于2,因此它仍然是AVL树。因此,您的最大高度为4.(最小值+ 1)
如果您的树具有非常大的节点数,则上面显示的技术不成立。在这种情况下,可以使用以下公式计算精确的最小/最大值。
给定n个节点 2 :
最低限度: ceil(log 2 (n + 1))
最高:楼层(1.44 * log 2 (n + 2) - .328)
如果你很好奇,第一次max-min> 1是n = 54时。
1 感谢Jamie S将更多节点计数的失败引起我的注意。
2 这些公式来自Wikipedia AVL page,插入了常量。原始来源是Donald E. Knuth的排序和搜索(第2版)。
答案 1 :(得分:6)
重要的是要注意AVL树的以下定义特征。
AVL树属性
定理:AVL属性足以维持最坏情况下的树高O(log N)。
请注意下图。
- T1由T0 + 1节点组成,高度为1
- T2由T1和T0 + 1节点组成,高度为2
- T3由左子树的T2和右边的T1组成
子树+ 1节点,高度为3
- T4由左子树的T3和右边的T2组成
子树+ 1节点,高度为4 。
如果你采用 O的上限(log N),其中N表示AVL树中的节点数,则得到高度。
示例)T4包含12个节点。 [ceiling] O(log 12)= 4。
看到这里发展的模式??
**最差情况下的身高是
答案 2 :(得分:3)
让我们假设节点数 n
尝试找出AVL树的最小高度与尝试使树完成相同,即填充每个级别的所有可能节点,然后移动到下一级别。< / p>
因此,在每个级别,符合条件的节点数量增加 2 ^(h-1),其中h是树的高度。
因此,在h = 1时,节点(1)= 2 ^(1-1)= 1个节点
对于h = 2,节点(2)=节点(1)+ 2 ^(2-1)= 3个节点
对于h = 3,节点(3)=节点(2)+ 2 ^(3-1)= 7个节点
所以只找到最小的h,节点(h)大于给定的节点数n。
现在解决AVL树的最大高度问题: -
假设AVL树的高度为h,F(h)是AVL树中的节点数,
因为它的高度最大,我们假设它的左子树FL和右子树FR的高度差为1(因为它满足AVL属性)。
现在假设FL是一个高度为h-1的树,FR是一个高度为h-2的树。
现在
中的节点数量F(h)= F(h-1)+ F(h-2)+1(Eq 1)
双方都加1:
F(h)+ 1 =(F(h-1)+1)+(F(h-2)+1)(Eq 2)
所以我们将最大高度问题减少到Fibonacci sequence
。而这些树F(h)被称为Fibonacci Trees。
因此,F(1)= 1且F(2)= 2
所以为了获得最大高度,只需找到斐波纳契数列中小于或等于n的数字的索引。
所以申请(Eq 1)
F(3)= F(2)+ F(1)+ 1 = 4,所以如果n介于2和4之间,树的高度为3。
F(4)= F(3)+ F(2)+ 1 = 7,类似地,如果n在4到7之间,树将具有高度4.
等等。
答案 3 :(得分:0)
http://lcm.csa.iisc.ernet.in/dsa/node112.html
大约是1.44 * log n,其中n是节点数。
有关如何派生的详细说明。您可以参考从第13页中间开始的链接:http://www.compsci.hunter.cuny.edu/~sweiss/course_materials/csci335/lecture_notes/chapter04.2.pdf