平衡樹(一)隨機化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. 每個節點需要有一個域用於記錄該節點子樹節點個數。
点赞