今天学习平衡树与二叉树,希望能够从记博客中总结一下学到的知识。
本文图片来自于IDREAMO的博客https://www.cnblogs.com/idreamo/p/8308336.html。这篇文章讲的还是很不错的,推荐大家多学习学习。
二叉搜索树只有保持平衡时其查找效率才会高。
在平衡树中,重要的是保持中序和平衡,因此平衡树的旋转中,所有的旋转都是依据中序来操作的,也就是说旋转不引起中序的变化。
当插入一个新的元素或者删除元素的时候,可能会导致平衡树的失衡,插入一个元素可能会导致几个节点的平衡被破坏,因此需要从插入元素依次向上搜寻失衡的节点,每个失衡的节点都需要重新调整平衡。
在旋转中分为LL,LR,RR,RL四种旋转。
LL旋转
插入的元素在失去平衡节点的右节点的右节点称为LL旋转
从这张图片中可以看出,插入后的顺序为X-15-22-43-A-75,因此旋转的时候将左节点的右节点作为根节点的左节点,这样就可以保证中序不变即22-43-A的顺序不变,同时不平衡点也将变成平衡。(中序:先 接受左节点)
LR旋转:
LR旋转中,因为不平衡部分为22-X-43 因此我们旋转的时候需要将X成为left节点的右孩子,43成为根节点,A成为43的右孩子,这样改变的平衡,也保持了22-X-43的中序没有改变。旋转后的顺序依然没有变化,15-22-x-43-A-75
其实我这里还有一些疑问,如果X是在43的右节点,那么就不能将x作为22的右节点,而是将43作为22的右节点,X作为22的父亲,结果是这样样子吗,我还不太清楚,等我继续学习了以后再来修补这个问题
RR旋转与LL旋转相对应
RL旋转与LR旋转相对应,原理都是一样的,保持中序不变,旋转改变平衡。
接下来会学习文中提到的疑问,和红黑树的旋转,红黑树不仅要求中序和平衡,还要求红黑平衡,因此难度会更大一些。