看了这么多数据结构的书,这个失衡旋转介绍的有点小复杂,特别是把旋转分四类的,什么单左,单右,先左后右,先右后左。
其实这个调整失衡只有两个字 ------赵云。哦,不对,是顺平
请出我大顺平候,赵云帅哥就搞定了
顺-----将高度增加的子树从夹在中间旋成靠边(已靠边的就已顺了)
平-----旋转使之平衡。
记住这两个字,就搞定所有情况的失衡啦,也不需要废那么多口舌。
已顺只需平
需先顺后平
那,就是这样啦。
记住赵云大帅哥,顺平一下,AVL就听话了。
哦,搞忘了说,旋转的要诀,所以重新编辑一下
旋转的前提:首先根据我上面的“顺平”要求,确定你需要旋转的方向。
要诀:添啥减啥,缺啥补啥(补的就是第一句里面减的)
比如 上面图二, 第一步“顺”的时候,v,p要旋转,v会把p添为自己的右子树,所以添“右”减“右”,减去自己原来的右子树“2”,而p的原左子树v就变成p的父节点了,p缺左子树,所以缺“左”补“左”(补的子树为前一步减下来的子树)。
解释的够清楚了吧,所有旋转都是这样的:添啥减啥,缺啥补啥。
ok,搞定。