Я пытаюсь построить массив «Бинарное дерево поиска» на основе массива, следуя алгоритму по адресу:
http://highered.mcgraw -hill.com / olcweb / CGI / pluginpop.cgi? Это = GIF :: 600 :: 388 :: / сайтов / дл / бесплатно / 0070131511/25327 / tree_insert.gif :: ДЕРЕВО -INSERT .
... используя алгоритм, я придумал следующий код:
void BST::insert( const data &aData )
{
item *y = &items[root_index]; // Algorithm calls for NULL assignment..
item *x = &items[root_index];
while ( ! items[root_index].empty )
{
y->theData = x->theData; // Ptrs are required or else a crash occurs.
if ( aData < x->theData )
{
x->leftChild = aData;
}
else
{
x->rightChild = items[root_index].theData;
}
// what is p[z] = y? is it outside the looping scheme?
root_index++; // and make the new child the root?
}
if ( y->empty )
{
items[root_index].theData = aData;
items[root_index].empty = false;
}
else if ( aData < y->theData )
{
y->leftChild = aData;
// If we already have a left/right child...make it the root? re-cmpr?
}
else
{
y->rightChild = items[root_index].theData;
}
}
Вопросы:
Я не могу понять, что означает p [z] <- y .... Я просто увеличиваю корень, чтобы имитировать ход. </p>
Если у меня уже есть левый / правый потомок, я должен сделать так, чтобы левый / правый потомок перезаписывал корень? Там я должен сделать его рекурсивным, чтобы он переключился обратно на исходный корень, «R»?
Вставка
Вставка ( "R");
Вставка ( "А");
Вставка ( "F");
Вставка ( "L");
вставки ( "B");
вставки ( "C");
Вставка ( "Т");