在算法导论 - 创造性方法一书中,问题4.18:
4.3.4节中介绍的AVL算法要求平衡因子具有三个可能的值:1,0或-1。为了表示三个值,我们需要2位。建议一种实现这些算法的方法(只需略微修改),每个节点只有1个额外的位。
我通过记录每个节点的高度而不是平衡因子来实现AVL树。
但我不知道如何只用1位表示三个值(1,0,-1)。我想必须有一些其他信息可以用来表示1,0,-1和1位。
有人可以帮忙解决这个问题吗?
答案 0 :(得分:0)
如果节点没有两个儿子 - 你可以计算它 否则你可以在儿子里记住它:左儿子一个,右儿子一个。
答案 1 :(得分:-1)
减去高度{{1}},然后使用 int balance = left->height - right->height
,balance <= -1
和balance == 0
。除了高度之外,不需要额外的位。
在每个节点中保留一个单词,其含义为“此子树的高度低于其兄弟”。节点上的平衡因子与其子节点中的额外位之间存在1:1的对应关系。
balance >= 1