清除二叉搜索树
我遇到了这种方法来清除二叉搜索树。代码在教科书中给出。为什么最终必须创建并删除节点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;
}
这是因为删除动态内存的标准方式是删除,并delete it's used with pointers。
为什么不删除子根而不是初始化一个临时变量并将其删除? – VequalsIR 2013-04-29 15:17:05
mmm,我认为这将取决于左右属性的类型。你可以在这里发布吗?我只想知道它们是否是指针 – vivoconunxino 2013-04-29 19:49:16
它们必须是...(sub_root-> left),所以我没有看到像你一样的原因来创建temp var:S。令我困惑的是对指针参数的引用 – vivoconunxino 2013-04-29 20:05:05
提示:'sub_root'通过引用传递。这是**从字面上** 10分钟前:[链接](http://stackoverflow.com/questions/16255235/using-free-on-ac-struct/16255294#16255294) – 2013-04-27 18:06:32
@ H2CO3是的,但为什么存储sub_root至temp,因为您传递sub_root->向左或向右而不是sub_root。 – 2013-04-27 18:20:04
@Armin因为有'sub_root = NULL;'语句。 – 2013-04-27 18:20:57