2012-12-01 3 views
0

У моего BST есть только один узел. Я написал код для удаления этого узла, но он все еще там. Так же, как это не было ... обновлено. Вот мой простой код, просто чтобы проверить случайУдалить единственный узел из BST

void Delete(BSTree* tree, int& key) 
{ 
    if (key == tree->key) 
     tree=NULL; 
} 

И мой класс BSTree не имеет parrent части. Просто значение и левый и правый указатель. Что не так с моим кодом? Спасибо!

ответ

1

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

Вы хотите BSTree *&tree, чтобы получить ссылку на исходный указатель, чтобы любые изменения повлияли на него.

Как указывает Алс, не забудьте освободить память в дополнение к вышесказанному.

+0

Большое вам спасибо! Это работает :) –

+0

И еще одна вещь, у меня есть код для отображения дерева, и если это NULL, я буду cout << NULL; но это просто как ... пустое дерево, а не NULL? –

+0

Это зависит от того, что означает 'NULL' для вашего дерева. В вашей функции отображения вы, скорее всего, остановитесь на 'NULL', прежде чем показывать ее (вы, очевидно, останавливаетесь, прежде чем пытаться ее обработать, иначе она сработает). – pickypg

Смежные вопросы