2013-04-27 221 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