平衡树(一)随机化BST

思想:

当我们把一个新节点插入的N个节点的树中时,新节点出现在树根的概率是1/(N+1),因而我们就随机决定用这个概率进行根插入。否则,我们递归的使用下述方法插入新纪录:如果该记录的关键字小于树根的关键字,就把记录插入到左子树中;如果该记录的关键字小于树根的关键字,就把该记录插入到右子树中。

程序实现:
link insertR(link h,Item item)//item 插入树 h 
{
    Key v = key(item);
    Key t = key(h->item);

    if(h == z)    //空树
        return NEW(item,z,z,l);

    if(rand() < RAND_MAX/(h->N+1)) //随机决定是否采用根插入法(rand()产生随机数),这样新纪录的最终位置可能记录在路径中任何地方。
        return insertT(h,item);

    if less(v,t)                                          //否则,递归的用下述方法插入新记录
        h->l = insertR(h->l,item);
    else
        h->r = insertR(h->r,item);

    (h->N)++;
    return h;

}


随机化插入的缺点:

  1. 每次插入期间每个节点生产随机数的开销。
  2. 每个节点需要有一个域用于记录该节点子树节点个数。


猜你喜欢

转载自blog.csdn.net/u010034085/article/details/80684181
今日推荐