2013-04-27 5 views
0

Я столкнулся с этим методом, чтобы очистить двоичное дерево поиска. Код приведен в учебнике. Почему в конце должен быть создан и удален узел temp? Почему бы не удалить подкрот, а не сделать его нулевым?Очистка дерева двоичного поиска

void Binary_tree<Entry> :: recursive_clear(Binary_node<Entry> * &sub_root) 
/* Post: The subtree rooted at sub_root is cleared. */ 
{ 
Binary_node<Entry> *temp = sub_root; 
if (sub_root == NULL) return; 
recursive_clear(sub_root->left); 
recursive_clear(sub_root->right); 
sub_root = NULL; 
delete temp; 
} 
+1

Подсказка: 'sub_root' передается по ссылке. Это было задано ** буквально ** десять минут назад: [link] (http://stackoverflow.com/questions/16255235/using-free-on-ac-struct/16255294#16255294) – 2013-04-27 18:06:32

+0

@ H2CO3 Да, но зачем хранить sub_root to temp, так как вы проходите sub_root-> влево или вправо, а не в sub_root. – 2013-04-27 18:20:04

+0

@Armin Потому что есть инструкция 'sub_root = NULL;'. – 2013-04-27 18:20:57

ответ

1

Это происходит потому, что стандартный способ удаления динамической памяти является со стиранием и delete it's used with pointers.

+0

Почему бы просто не удалить подкрот, а не инициализировать временную переменную и удалить ее? – VequalsIR

+0

mmm, я думаю, это будет зависеть от типа левого и правого атрибутов. Можете ли вы опубликовать его здесь, пожалуйста? Я просто хочу знать, являются ли они указателями или нет – vivoconunxino

+0

они должны быть ... (sub_root-> left), поэтому я не вижу причины, как вы, для создания temp var: S. То, что меня озадачивает, это ссылка на параметр указателя – vivoconunxino

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