一、b樹的定義
2023年,r. bayer和e.m ccreight 提出了一種適合外查詢的樹,它是一種平衡的多叉樹,稱為b樹,有些地方寫的是b-樹,注意不要誤讀成"b減樹")
1、b樹(b-tree)是對2-3樹資料結構的擴充套件,又稱為多路平衡查詢樹,它的乙個節點可以擁有多於2個子節點的二叉查詢樹。與自平衡二叉查詢樹不同
2、b樹是一種自平衡樹資料結構,可以保持資料排序,它能夠儲存資料、對其進行排序並允許以o(log n)的時間複雜度執行進行查詢、順序讀取、插入和刪除的資料結構
3、b樹針對讀寫大資料塊的系統進行了優化。b樹的演算法減少定位記錄時所經歷的中間過程,從而加快訪問速度。普遍運用在資料庫和檔案系統。
二、b樹的性質
一棵m階(m>2)的b樹,是一棵平衡的m路平衡搜尋樹,可以是空樹或者滿足一下性質:
1. 根節點至少有兩個孩子
2. 每個非根節點至少有m/2(上取整)個孩子,至多有m 個孩子 3. 每個非根節點至少有m/2-1( 上取整)個關鍵字,至多有m-1個關鍵字,並且以公升序排列
4. key[i]和key[i+1]之間的孩子節點的值介於key[i ]、key[i+ 1]之間
5. 所有的葉子節點都在同一層
三、b樹的插入
步驟:1、插入乙個元素時,首先在b樹中是否存在,如果不存在,即比較大小尋找插入位置,在葉子結點處結束,然後在葉子結點中插入該新的元素
2、如果葉子結點空間足夠,這裡需要向右移動該葉子結點中大於新插入關鍵字的元素,如果空間滿了以致沒有足夠的空間去新增新的元素,則將該結點進行「**」,將一半數量的關鍵字元素**到新的其相鄰右結點中,中間關鍵字元素上移到父結點中(當然,如果父結點空間滿了,也同樣需要「**」操作)
3、當結點中關鍵元素向右移動了,相關的指標也需要向右移。如果在根結點插入新元素,空間滿了,則進行**操作,這樣原來的根結點中的中間關鍵字元素向上移動到新的根結點中,因此導致樹的高度增加一層
eg:m階b樹--m=3
插入36:
插入101後還需要**。
**:
#includeusing namespace std;
templatestruct btreenode
} k _key[m];
btreenode*_psub[m + 1];
btreenode*_pparent;
size_t _size;
};templateclass btree
bool insert(k& key)
pairret = find(key);
if (ret.second >= 0)
return false;
pnode pcur = ret.first;
pnode psub = null;
while (1)
tmp->_psub[tmp->_size] = pcur->_psub[pcur->_size];
if (tmp->_psub[tmp->_size])
tmp->_psub[tmp->_size]->_pparent = tmp;
pcur->_size -= (tmp->_size + 1); //處理size
if (pcur == _proot) //如果當前結點是根結點,還需要再處理
else
}} }
pairfind(const k& key)
pparent = pcur;
pcur = pcur->_psub[i];
} return make_pair(pparent, -1);//沒找到返回-1
}private:
void _insert(pnode pcur, const k& key, pnode psub)
pcur->_key[end + 1] = key;
pcur->_psub[end + 2] = psub;
if (psub)
psub->_pparent = pcur;
pcur->_size += 1;
}private:
node *_proot;
};int main()
; btreeb;
size_t size = sizeof(arr) / sizeof(arr[0]);
for (size_t i = 0; i < 7; i++)
b.insert(arr[i]);
system("pause");
return 0;
}
B 樹的插入
一.b 樹的定義 一棵m階 m 2 的b樹,是一棵平衡的m路平衡搜尋樹,可以是空樹或者滿足一下性質 1.根節點至少有兩個孩子。2.每個非根節點至少有m 2 上取整 個孩子,至多有m 個孩子。3.每個非根節點至少有m 2 1 上取整 個關鍵字,至多有m 1個關鍵字,並且以公升序排列 4.ke y i ...
B樹 (插入操作)
一顆m階的b樹滿足一下特性 一 樹中的每個結點至多有m顆子樹,至少有顆子樹。除根結點和葉子結點外 其中表示m 2向上取整。二 樹中的每個結點至少有個關鍵字,至多m 1個關鍵字。當結點的關鍵字個數滿時,那麼該結點就需要 如何 假設 p結點已經有m 1個關鍵字,當再插入乙個關鍵字後,其關鍵字個數為m,超...
B樹(又稱B 樹)插入 刪除操作
b樹是一種平衡的多分樹,通常我們說m階的b樹,它必須滿足如下條件 1 每個結點至多有m個子結點 2 除根結點和葉結點外,其它每個結點至少有ceil m 2 個子結點 3 根結點至少有兩個子結點 唯一例外的是根結點就是葉子結點 4 所有的葉結點在同一層 5 有k個子結點的非根結點恰好包含k 1個關鍵碼...