B樹的插入

2021-08-16 20:08:37 字數 2565 閱讀 9443

一、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個關鍵碼...