B 樹的插入

2021-08-17 07:04:56 字數 2038 閱讀 7466

一.  b_樹的定義

一棵m階(m>2)的b樹,是一棵平衡的m路平衡搜尋樹,可以是空樹或者滿足一下性質: 

1. 根節點至少有兩個孩子。

2. 每個非根節點至少有m/2(上取整)個孩子,至多有m 個孩子。

3. 每個非根節點至少有m/2-1( 上取整)個關鍵字,至多有m-1個關鍵字,並且以公升序排列 。

4. ke y [i]和ke y[i+1]之間的孩子節點的值介於key[i ]、key[i+ 1]之間 。

5. 所有的葉子節點都在同一層。

二. b_樹插入及其**

以序列 為例:

三.  b_樹插入的基本實現

#includeusing namespace std;

templatestruct btreenode

}};templateclass btree

bool insertnode( k&key, const int& m)

//找插入結點的位置

pairret = find(_proot,key, m);

if (ret.second >= 0)

pnode pcur = ret.first;

pnode psub = null;

while (true)

//孩子結點比關鍵字多搬移乙個

temp->_psub[temp->_size] = pcur->_psub[pcur->_size];

if (temp->_psub[temp->_size])

temp->_psub[temp->_size]->_parent = temp;

//更新pcur的size

pcur->_size -= (temp->_size + 1);

//如果當前結點為根節點,還要再處理

if (pcur == _proot)

else

}} }

void inorder()

private:

void _inorder(pnode proot)

_inorder(pcur->_psub[pcur->_size]);

//cout << pcur->_key[pcur->_size] << " ";

}//直接插入法

void _insertnode(pnode proot, const k& key, pnode psub)

pcur->_key[sz + 1] = key;

pcur->_psub[sz + 2] = psub;

if (psub)

psub->_parent = pcur;

pcur->_size++;

} pairfind(pnode proot,const k& key, const int& m)

pparent = pcur;

pcur = pcur->_psub[i];

}return pair(pparent, -1);

}private:

pnode _proot;

};

int main()

; btreebt;

int sz = sizeof(arr) / sizeof(arr[0]);

for (int i = 0; i < sz; i++)

bt.insertnode(arr[i],3);

bt.inorder();

system("pause");

return 0;

}

B樹的插入

一 b樹的定義 1970年,r.bayer和e.m ccreight 提出了一種適合外查詢的樹,它是一種平衡的多叉樹,稱為b樹,有些地方寫的是b 樹,注意不要誤讀成 b減樹 1 b樹 b tree 是對2 3樹資料結構的擴充套件,又稱為多路平衡查詢樹,它的乙個節點可以擁有多於2個子節點的二叉查詢樹。...

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