Методы расщепления узлов B-Tree

Я наткнулся на проблему, выполняя домашнюю работу по DSA (структурам данных и алгоритмам). Я сказал, чтобы реализовать B-дерево с алгоритмами вставки и поиска. Насколько это возможно, поиск работает правильно, но у меня возникли проблемы с реализацией функции вставки. В частности, логика, лежащая в основе алгоритма расщепления узлов B-Tree. Псевдокод / ​​C-стиль, который я мог бы придумать, следующий:

    #define D 2
#define DD 2*D

typedef btreenode* btree;
typedef struct node
{
int keys[DD];  //D == 2 and DD == 2*D;
btree pointers[DD+1];
int index; //used to iterate throught the "keys" array
}btreenode;

void splitNode(btree* parent, btree* child1, btree* child2)
{
//Copies the content from the splitted node to the children
(*child1)->key[0] = (*parent)->key[0];
(*child1)->key[1] = (*parent)->key[1];
(*child2)->key[0] = (*parent)->key[2];
(*child2)->key[1] = (*parent)->key[3];
(*child1)->index = 1;
(*child2)->index = 1;
//"Clears" the parent node from any data
for(int i = 0; i<DD; i++) (*parent)->key[i] = -1;
for(int i = 0; i<DD+1; i++) (*parent)->pointers[i] = NULL
//Fixed the pointers to the children
(*parent)->index = 0;
//the line bellow was taken out for creating a new node  that didn't have to be there.
//(*parent)->key[(*parent)->index] = newNode(); // The newNode() function allocs and inserts a the new key that I need to insert.
(*parent)->pointers[index] = (*child1);
(*parent)->pointers[index+1] = (*child2);
}

Я почти уверен, что что-то напутал с указателями, но я не уверен, что. Любая помощь приветствуется. Может быть, мне нужно немного больше изучать тему B-Tree? Я должен добавить, что хотя я могу использовать базовый ввод / вывод из C ++, мне нужно использовать структуры в стиле C.

0

Решение

Вам не нужно создавать новый узел здесь. Вы, очевидно, уже создали два новых дочерних узла. Все, что вам нужно сделать здесь после заполнения дочерних элементов, это сделать так, чтобы родительский элемент теперь указывал на двух дочерних элементов посредством копии первого ключа в каждом из них и корректировал его счетчик ключей до двух. Вам также не нужно устанавливать родительские ключи в -1.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector