向B树插入关键字

B树的创建:

B-TREE-CREATE(T)
1  x  ALLOCATE-NODE()
2  leaf[x]  TRUE
3  n[x]  0
4  DISK-WRITE(x)
5  root[T]  x

 

B树中节点的分裂:

B-TREE-SPLIT-CHILD(x, i, y)
 1  z  ALLOCATE-NODE()
 2  leaf[z]  leaf[y]
 3  n[z]  t - 1
 4  for j  1 to t - 1
 5       do keyj[z]  keyj+t[y]
 6  if not leaf [y]
 7     then for j  1 to t
 8              do cj[z]  cj+t[y]
 9  n[y]  t - 1
10  for j  n[x] + 1 downto i + 1
11       do cj+1[x]  cj [x]
12  ci+1[x]  z
13  for j  n[x] downto i
14       do keyj+1[x]  keyj[x]
15  keyi[x]  keyt[y]
16  n[x]  n[x] + 1
17  DISK-WRITE(y)
18  DISK-WRITE(z)
19  DISK-WRITE(x)

 B树结点的分裂

B树的插入:

B-TREE-INSERT(T, k)
 1  r  root[T]
 2  if n[r] = 2t - 1
 3     then s  ALLOCATE-NODE()
 4         root[T]  s
 5         leaf[s]  FALSE
 6         n[s]  0
 7         c1[s]  r
 8         B-TREE-SPLIT-CHILD(s, 1, r)
 9         B-TREE-INSERT-NONFULL(s, k)
10    else B-TREE-INSERT-NONFULL(r, k)

 B树根结点的处理

B树插入的子过程(根节点不满情况):

 

B-TREE-INSERT-NONFULL(x, k)
 1  i  n[x]
 2  if leaf[x]
 3     then while i  1 and k < keyi[x]
 4            do keyi+1[x]  keyi[x]
 5                   i  i - 1
 6             keyi+1[x]  k
 7             n[x]  n[x] + 1
 8             DISK-WRITE(x)
 9     else while i  1 and k < keyi[x]
10             do i  i - 1
11           i  i + 1
12           DISK-READ(ci[x])
13           if n[ci[x]] = 2t - 1
14             then B-TREE-SPLIT-CHILD(x, i, ci[x])
15                    if k> keyi[x]
16                      then i  i + 1
17           B-TREE-INSERT-NONFULL(ci[x], k)

B树的插入
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值