zoukankan      html  css  js  c++  java
  • 平衡树的旋转

    今天学习平衡树与二叉树,希望能够从记博客中总结一下学到的知识。

    本文图片来自于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旋转相对应,原理都是一样的,保持中序不变,旋转改变平衡。

    接下来会学习文中提到的疑问,和红黑树的旋转,红黑树不仅要求中序和平衡,还要求红黑平衡,因此难度会更大一些。

  • 相关阅读:
    [loj6484]LJJ爱数书
    [loj3163]动态直径
    [loj2983]数树
    [luogu3785]文本校正
    [loj2572]字符串
    [loj3103]节日庆典
    [atARC118F]Growth Rate
    [atARC118E]Avoid Permutations
    [cf794G]Replace All
    [cf756E]Byteland coins
  • 原文地址:https://www.cnblogs.com/tjpeng/p/10258579.html
Copyright © 2011-2022 走看看