WhileRAux.mLink[0] > -1 do

Begin

// Движемся к самому правому потомку RAux.

 

lRightest := RAux.mLink[RAux.nData];

SeekAndRead(lRightest, RAux);

end;

 

// Напоминаем: надо удалить ключ R.mData[i],

// который находится на НЕтерминальной странице.

 

sAux := R.mData[i];

R.mData[i] := RAux.mData[RAux.nData];

RAux.mData[RAux.nData] := sAux;

SeekAndWrite(lStartPage, R);

SeekAndWrite(lRightest, RAux);

 

 

// А мы вот взяли и обменяли значениями

// ключи R.mData[i] и RAux.mData[RAux.nData].

 

// Чем это лучше?

// Тем, что теперь надо удалять ключ RAux.mData[RAux.nData]

// из ТЕРМИНАЛЬНОЙ страницы.

 

// А чем это хуже?

// Тем, что дерево испорчено. Оно теперь НЕ ЕСТЬ дерево поиска.

 

// Почему?

// Доступ к удаляемому ТЕРМИНАЛЬНОМУ ключу

// возможен только от ЛЕВОЙ ссылки под R.mData[i]

// (а не от правой, как должно быть у дерева поиска).

// Но возможен же! Так что получим этот доступ и удалим.

 

ExcludeKey(sFind, iLevel + 1, R.mLink[i - 1], bBecameTooFew);

// Всё! Дерево вновь стало нормальным деревом поиска.

 

IfbBecameTooFew then

MergeTwoPages(i - 1, R.mData[i]);

Exit;

end;

end;

 

fori := 1 toR.nData do

Begin

iR := StringCompare(sFind, R.mData[i]);

 

IfiR < 0 then

Begin

ExcludeKey(sFind, iLevel + 1, R.mLink[i - 1], bBecameTooFew);

// Это bBecameTooFew пришло СЮДА от дочернего экземпляра ExcludeKey

// и будет использовано ЗДЕСЬ.

 








Дата добавления: 2015-08-21; просмотров: 559;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.