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