AVL树:树叶深度之间的差异?

时间:2018-06-26 23:55:35

标签: data-structures binary-tree avl-tree

一个测试中的问题:

T是AVL树,而x,y是树中的两片叶子(x != y)。 depth(x) - depth(y)的最大值是多少?

A. 0
B. 1
C. 2
D. None of the above

正确(?)的答案是D。有人可以解释为什么不是B,因为AVL属性之一是每个节点height(a.left) - height(a.right) <= 1的{​​{1}}吗?

2 个答案:

答案 0 :(得分:2)

一个AVL树保证“最坏”案例查找时间为O(log(n))。并且它保证任何两个子树的高度差最大为1。但这不能保证整个树的最低节点和最高节点之间的高度差为1。在大树中,有可能变得很大整个树的高度差。

理解AVL树的关键是理解其对“子树”的定义。对于任何给定的节点,都有2个子树,有时称为左子树和右子树。这两个子树之间的高度差最大为1。现在想象这两个子树都可以附加到一个节点上,并成为更大树中的一个子树。这个新的子树,称为节点的左子树,与同一节点上的右子树的高度差最大为1。但这也意味着整棵树中任何两片叶子之间的最大高度差将为2。可以重复此过程,并且AVL树的任何一个到叶子之间的高度差都可以很大,但仍保持较大的O运行时间。 >

答案 1 :(得分:2)

以一般方式进行解释比显示反例需要更多的时间。因此,请考虑以下8阶的斐波那契树,即AVL树:

enter image description here

以深度作为从根到节点的边数,叶0的深度为7,叶52的深度为4。相差为3。对于其他树和较大的AVL树,相差可能更大。

请记住,树AVL的作用是每个节点的左右子树的高度之差小于或等于1。深度是另一回事。

说实话,这是一个棘手的问题。