赞
踩
一棵B树T是具有以下性质的有根树(根为T.root);
1、 每个结点x有下面属性:
2、每个内部结点x还包含
3、 关键字
定理:如果
1、搜索B树
B-TREE-SEARCH(x,k)
i = 1
while i<=x.n && k > x.key[i]
i++
if i <= x.n and k = x.key[i]
return (x,i)
elif x.leaf
reurn NIL
else DISK-READ(x.c[i])
return B-TREE-SEARCH(x.c[i],k)
2、创建一棵空的B树
B-TREE-CREATE(T)
x = ALLOCATE-NODE()
x.leaf = TRUE
x.n = 0
DISK-WRITE(x)
T.root = x
3、向B树中插入一个关键字
B-TREE-SPLIT-CHILD(x, i)
z = ALLOCATE-NODE()
y = x.c[i]
z.leaf = y.leaf
z.n = t-1
for j=1 to t-1
z.key[i]=y.key[t+j]
if !y.leaf
for j=1 to t
z.c[j]=y.c[t+j]
y.n = t-1
for j = x.n+1 downto i+1
x.key[j+1] = x.key[j]
x.c[i+1] = z
for j = x.n downto i
x.key[j+1] = x.key[j]
x.key[i] = y.key[t]
x.n++
DISK-WRITE(y)
DISK-WRITE(z)
DISK-WRITE(x)

B-TREE-INSERT(T,k)
r = T.root
if r.n == 2t-1
s = ALLOCATE-NODE()
T.root = s
s.leaf = FALSE
s.n = 0
s.c = r
B-TREE-SPLIT-CHILD(s,1)
B-TREE-INSERT-NONFULL(s,k)
else B-TREE-INSERT-NONFULL(r,k)
B-TREE-INSERT-NONFULL(x,k)
i = x.n
if x.leaf
while i>=1 && k<x.key[i]
x.key[i+1] = x.key[i]
i--
x.key[i+1] = k
x.n++
DISK-WRITE(x)
else
while i>=1 && k<x.key[i]
i--
i++
DISK-READ(x.c[i])
if x.c[i].n = 2t-1
B-TREE-SPLIT-CHILD(x,i)
if k > x.key[i]
i++
B-TREE-INSERT-NONFULL(x.c[i],k)

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。