Алгоритм на псевдокоде. Построение Б – дерева (D: Данные, a: pPage, Rost: Boolean, V: Item)

Построение Б – дерева (D: Данные, a: pPage, Rost: Boolean, V: Item)

Обозначим D – добавляемые данные

а – адрес страницы

Rost – логическая переменная; (принимает значение истина, если дерево выросло).

V – рабочая переменная типа Item для элемента, передаваемого вверх по дереву.

u – рабочая переменная типа Item, фактический параметр при вызове процедуры построения

IF (a = NIL) {D нет в дереве, включение}

V.Data:= D

V.p:= NIL

Rost:= ИСТИНА

ELSE Поиск в Б-дереве (D,a)

IF (R > 0 и a→ eR.data = D) {элемент D есть в дереве}

ELSE (на этой странице ключа D нет)

IF(R = 0) Построение Б-дерева(D, a→p0, Rost, u)

ELSE Построение Б-дерева (D, a→eR.p, Rost, u)

FI

IF (Rost = true) {включение u вправо от eR}

IF (k < 2m) Rost:= false {есть место на странице}

k:= k+1

DO (i = k, k-1,..., R+2) ei = ei-1

OD

e R+1:= u

ELSE {переполнение страницы}

New(b) {создание новой страницы}

IF (R<= m)

IF (R=m) V:= u

ELSE V:=em

DO (i = m, m-1,..., R+2) ei:= ei-1

OD

eR+1:= u

FI

DO (i:=1, 2,... m) b→ei:= a→ei-1

OD

ELSE {включение в правую страницу}

R:= R-m

V:=em+1

DO(i=1, 2,... R-1) b→ei:= a→ei+m+1

OD

b→eR:= u

DO (i:=R+1, R+2,..., m) b→ei:= a→ei+m

OD

FI

a→k:= m

b→k:= m

b→p0:= V.p

V.p:= b

FI

FI

FI

FI

При создании Б-дерева необходимо предусмотреть разделение корневой страницы и создания нового корня из одного элемента. Это будет выполняться, если после обращения к процедуре построения Б-дерева с параметром Rost равным ИСТИНА.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: