getBalanceFactor(node.left) >= 0

来源:12-7 从AVL树中删除元素

qq_萌新_4

2020-06-18

一、getBalanceFactor(node.left) >= 0这里的等号对于添加操作意义不大,很奇怪的是添加操作并不需要判断等于,这是否是一个巧合?(最后添加的元素没有构成等于的条件,所以还是进行了旋转)。对添加来说等于放在LR和RL里面判断也是可以的。
二、但是对于删除操作不加这个=条件的话就会报错,而且必须是LL和RR的时候添加这个条件,这是为啥?,老师之前的回答https://coding.imooc.com/learn/questiondetail/102451.html我也看了
三、以我的理解,由于添加操作是一个一个的不可能出现getBalanceFactor(node.left) == 0的情况,因为只要一打破平衡(多出一个叶子节点)那么维护机制就会启动。但是删除操作完全有可能出现getBalanceFactor(node.left) == 0的情况,这样的话就必须进行旋转,这种情况向一个方向旋转是没有问题的,然而如果进行LR或者RL,那么L或者R就会多出一个叶子(刚好和添加的感觉是相反的),这样的话平衡还是不存在的(始终会有一个地方balanceFactor=2)。不知道这样理解正确不,可能还要多消化一下。。

写回答

1回答

liuyubobobo

2020-06-19

1 添加的时候不会出出现等于的情况,这里同学的提问已经很好地解释了:https://coding.imooc.com/learn/questiondetail/59846.html


2 删除的时候不加 = 会报错,就是因为删除的时候会出现 = 的情况。在这个问答下我给出了一个例子:https://coding.imooc.com/learn/questiondetail/102451.html


继续加油!:)

0
1
qq_萌新_4
非常感谢!
2020-06-19
共1条回复

玩转数据结构

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

6221 学习 · 1704 问题

查看课程