查找二,二叉树查找与2-3树红黑树

BST:

  每个节点的键,都大于其左自述中的任意节点的键,而小于有字数的任意结点的键。

  部分实现

    get(Node x , Key key){

  if(x == null) return null;

  cmp = key.compareTo(x.key);

  if(cmp<0) retrun get(x.right,key);

  else if(cmp>0) retrun get(x.left,key);

  else return x.val;

}

 

2-3树红黑树:

 

   属于平衡查找树,为了希望保持二分查找树的平衡性。

   红黑树属于2-3树的变形表示。红黑树有性质,有序性和完美平衡性,通过旋转实现。

     实现:

      插入算法:

        put(Key key,Val val){

  root=put(root,key ,val);

root。color = BLACK;

}

put(Node h ,Key key ,Val val){

  if(h == null)

  return new Node(Key,val,1,RED);

}

 

int cmp = key.compareTo(h.key);

  if(cmp<0)  h.left =put(h.left,key,val);      

   if(cmp>0)  h.right =put(h.right,key,val);

  else{

  h.val=val;

}

if(isRed(h.right)&&!isRed(h.left)) h =rotateLeft(h);

if(isRed(h.right)&&isRed(h.left.left)) h =rotateRight(h);

if(isRed(h.right)&&isRed(h.right)) flipColors(h);

h.N=size(h.left)+size(h.right)+1;

return h;

 

                 最坏情况下          平均情况下            是否支持有序性的相关操作

                查找  插入          查找    插入

          

二叉树查找           N    N            1.39lgN  1.39lgN        是

2-3树查找(红黑树)      2LgN    2lgN          1.00lgN    1.00lgN      是

也就是说,表的大小上千亿,但是仍然却表几十次比较之内,就能完成

 

posted @ 2015-03-09 19:34  NYK  阅读(268)  评论(0编辑  收藏  举报