一个测试中的问题:
让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}}吗?
答案 0 :(得分:2)
一个AVL树保证“最坏”案例查找时间为O(log(n))。并且它保证任何两个子树的高度差最大为1。但这不能保证整个树的最低节点和最高节点之间的高度差为1。在大树中,有可能变得很大整个树的高度差。
理解AVL树的关键是理解其对“子树”的定义。对于任何给定的节点,都有2个子树,有时称为左子树和右子树。这两个子树之间的高度差最大为1。现在想象这两个子树都可以附加到一个节点上,并成为更大树中的一个子树。这个新的子树,称为节点的左子树,与同一节点上的右子树的高度差最大为1。但这也意味着整棵树中任何两片叶子之间的最大高度差将为2。可以重复此过程,并且AVL树的任何一个到叶子之间的高度差都可以很大,但仍保持较大的O运行时间。 >
答案 1 :(得分:2)