getBalanceFactor(node.left) >= 0的问题

来源:12-5 左旋转和右旋转的实现

Ian_Song

2020-04-21

老师,在这个条件判断上想向您请教一下:
我理解这句是要保证我们添加的节点在第一个不平衡节点(代码中的node)的左侧(代码中的node.left)的左侧(node.left.left),总的来说,node.left.left变高了,导致node.left变高了,导致node不平衡了。
那么来考察node.left的balance factor,如果之前node.left.left比node.left.right矮1,那么node.left.left变高之后,现在balance factor的确是0了,但是node.left的高度应该不会变化,因为高度等于1 + max(height(left), height(right)),node.left的高度还是1 + node.left.right。
所以我感觉,只有可能本来node.left.left就和node.left.right一样高,getBalanceFactor(node.left) >= 1。
烦请老师指出我哪里想错了。

写回答

1回答

liuyubobobo

2020-04-21

我理解你的问题是:对于 add 操作,getBalanceFactor 不会是 0,最少是 1。


你的判断是正确的。


不过,在这里,我们写的维护代码,后续也会使用在 remove 中,在 remove 的过程中,可能出现 == 0 的情况。


具体可以参考这里:https://coding.imooc.com/learn/questiondetail/102451.html 


继续加油!:)

1
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程