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 是
也就是说,表的大小上千亿,但是仍然却表几十次比较之内,就能完成