希望找到一种数据结构,能够保证所有操作(范围查找除外)均能够在对数时间内完成操作,以便改变二叉查找树的不足。

平衡查找树Balance Search Tree

一.2-3查找树

1.数据结构:每个结点允许1个或者两个key

(1)2-node:一个键,两个child。左子树小于该节点,右子树大于该节点。

(2)3-node:两个键,三个child。左子树小于两个节点,右子树大于两个节点,中间的子树在两个节点之间。

这个限定称为symmetric order

3.3 平衡查找树

2.完美平衡(Perfect balance):所有空链接到根结点的距离应该相等。

3.查找的思路:根据2-3查找树的概念,从根开始递归的查找该元素。和二叉查找树类似。

4.插入的思路:(保持完美平衡和symmetric order)

(1)如果在底部的2-node中插入,查找key应该插入的位置,然后将2-node变为3-node

(2)如果在底部的3-node中插入

  1)在3-node中增加一个key,暂时形成4-node

  2)将4-node中中间的一个移动到父结点中

  3)如果不满足2-3的结构的话,重复上面的过程

  4)如果已经到达了根结点,并且根结点是一个4-node,则将它拆分为3个2-node,也就是使得树的层次+1

5.三种情况举例:

(1)插入K(2-node变为3-node)

3.3 平衡查找树-------------》3.3 平衡查找树

(2)插入Z(临时4-node移动到父结点)

3.3 平衡查找树--------------------》3.3 平衡查找树

(3)插入L(根结点都满了,增加树的高度)

3.3 平衡查找树--------》3.3 平衡查找树------》3.3 平衡查找树

6.说明:

(1)树的高度。最坏的情况,全为2-nodes,性能是lgN。最好的情况,全为3-nodes,性能是logN/log3。

(2)对于million结点来说,树的高度在12到20之间。对于billion结点来说,高度在18到30之间。

(3)可以保证clgN的性能。

(4)直接的实现很复杂

 

二.红黑二叉查找树red-black BSTs

1.基本思想:利用标准的二叉查找树和一些额外的信息来表示2-3树

(1)红链接将2-node连接起来构成3-node

(2)黑链接则是2-3树中的普通链接

(3)3-node中较大的key是root

3.3 平衡查找树3.3 平衡查找树

2.另一个等价的定义:红黑树(left-leaning red-black BST)是一个含有红黑链接的特殊的二叉查找树,满足:

(1)没有一个结点同时和两个红链接相连

(2)该树是完美黑色平衡。即任意空链接到根结点的路径上的黑链接数量相同

(3)红链接均为链接。

3.从上面的分析可以,红黑树是 2-3树的一种等价的简单的实现。

4.查找。和普通的BST类似(不考虑颜色),但是由于具有更好的平衡性,红黑树有更快的查找速度。

   很多其他的操作(ceiling,selection等),也和普通的BST类似。

5.用BST表示红黑树。颜色表示,在普通BST的实现中给每个Node加上一个颜色(布尔值),表示父链接的颜色是红(true)/黑(false)。

6.左旋转。将一个右倾斜的红链接变为左倾斜。依旧维持了symmetric order和完美黑色平衡。

3.3 平衡查找树--------------------》3.3 平衡查找树

 

    //左旋转,将右倾斜变为左倾斜
    Node rotateLeft(Node h) {
        //结点关系
        Node x=h.right;
        h.right=x.left;
        x.left=h;
        //颜色
        x.color=h.color;
        h.color=RED;
        return x;    
    }
View Code

相关文章:

  • 2021-12-08
  • 2021-09-23
  • 2021-09-08
  • 2021-04-19
  • 2022-12-23
猜你喜欢
  • 2021-10-03
  • 2021-05-26
  • 2021-11-18
  • 2021-12-27
相关资源
相似解决方案