首页 > 代码库 > 平衡查找树

平衡查找树

2-3查找树:包含2-(一个键,两条链)节点和3-(两个键,三条链)节点的查找树

      所有空链到根节点的距离相同

      插入时:当插入的值导致节点变四叉时进行分裂,将中间的值传给上一个节点,

          并将另外两个值作为两个子节点分开,若上一节点也因此变成四叉,

          依次类推

           它是由下向上生长的

    插入和查找操作访问节点不超过lgN个,所以时间复杂度为lgN,在最坏的情况下任有较好的性能

    (当按照升序插入10个键会得到高度为9的2-查找树,但是使用2-3查找树的高度为2)

技术分享

红黑树:在2-3树的基础上,用一条红链接相连的两个2-节点表示一个3-节点

      (图中a是红节点,即红链接的左下)

  技术分享

另一种定义: 满足红链接均为左连接,没任一节点同时和两条红连接相连,

      任意空链接到根节点的路径上的黑链接数量相同的二叉查找树

技术分享

 

在实际操作中可能会出现红右链接或两条连续红链接,所以需要旋转,左旋,或者右旋

技术分享

 

 

技术分享

变色:

技术分享

 

插入操作:分三种情况,

      1.新键大于原树的两个键:插在右边,变色

      2.新键在两键之间:插在较小的右边,左旋,右旋,变色

      3.新键小于两键:插在较小的左边,右旋,变色

技术分享  

 

实际上这三种情况是互相转化的,情况2,3都是转化成1再变色的

技术分享

 

 

 

红黑树的性质(重要):根黑,要么红要么黑,红的儿子黑,

        从一个节点到其所有子孙节点所有路径包含相同的黑

 

B树:将2-3树一般化,将每个节点的键值对增加到 m-1个(相当于有序表),所有节点都带有关键码

    到达某个节点,先在有序表里查询,找不到向下找,到达叶子节点,说明没有关键码。

B+树:只有叶子节点带有关键码,为所有叶子节点增加一个链指针指向相邻叶子,所有关键字都在叶子节点出现(而B树不是)

 

 B树与红黑树最大的不同在于,B树的结点可以有许多子女,从几个到几千个。那为什么又说B树与红黑树很相似呢?因为与红黑树一样,一棵含n个结点的B树的高度也为O(lgn),但可能比一棵红黑树的高度小许多,应为它的分支因子比较大。

 

参考:http://www.cnblogs.com/ivictor/p/5849061.html

   http://brianway.github.io/2016/10/14/algorithms-data-structures-2/

平衡查找树