实现平衡因子,每个节点只有1个额外位

时间:2013-11-24 08:09:05

标签: algorithm avl-tree

算法导论 - 创造性方法一书中,问题4.18:

  

4.3.4节中介绍的AVL算法要求平衡因子具有三个可能的值:1,0或-1。为了表示三个值,我们需要2位。建议一种实现这些算法的方法(只需略微修改),每个节点只有1个额外的位。

我通过记录每个节点的高度而不是平衡因子来实现AVL树。

但我不知道如何只用1位表示三个值(1,0,-1)。我想必须有一些其他信息可以用来表示1,0,-1和1位。

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果节点没有两个儿子 - 你可以计算它 否则你可以在儿子里记住它:左儿子一个,右儿子一个。

答案 1 :(得分:-1)

减去高度{​​{1}},然后使用int balance = left->height - right->heightbalance <= -1balance == 0。除了高度之外,不需要额外的位。

在每个节点中保留一个单词,其含义为“此子树的高度低于其兄弟”。节点上的平衡因子与其子节点中的额外位之间存在1:1的对应关系。

balance >= 1