2013-04-27 240 views
0

我遇到了這種方法來清除二叉搜索樹。代碼在教科書中給出。爲什麼最終必須創建並刪除節點temp?爲什麼不刪除這個subroot而不是將其設置爲null?清除二叉搜索樹

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'通過引用傳遞。這是**從字面上** 10分鐘前:[鏈接](http://stackoverflow.com/questions/16255235/using-free-on-ac-struct/16255294#16255294) – 2013-04-27 18:06:32

+0

@ H2CO3是的,但爲什麼存儲sub_root至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 2013-04-29 15:17:05

+0

mmm,我認爲這將取決於左右屬性的類型。你可以在這裏發佈嗎?我只想知道它們是否是指針 – vivoconunxino 2013-04-29 19:49:16

+0

它們必須是...(sub_root-> left),所以我沒有看到像你一樣的原因來創建temp var:S。令我困惑的是對指針參數的引用 – vivoconunxino 2013-04-29 20:05:05