【发布时间】:2012-10-04 21:57:48
【问题描述】:
我正在做一个编程作业并编写一堆函数来实现二叉搜索树,并给出了一些函数。我以为我理解递归,但如果你愿意的话,我一直对切换方向感到困惑。
这是一个赋值函数:
static void deleteAll(BSTNode<Data>* n) {
if (0 == n) return;
deleteAll(n->left);
deleteAll(n->right);
delete n;
}
要删除一棵非常短的树,
根 / \ 左右手
我打电话给deleteAll(root)。 n != 0 所以现在我打电话给deleteAll(lefty)。 n != 0 所以我打电话给deleteAll(lefty->left)。当然没有左节点。当我添加左节点时,我的构造函数将左、右和父指针初始化为 0,所以现在 n == 0。所以我退出了函数并且永远不会删除 righty。我怎样才能到达deleteAll(n->right)?
正如我所说,提供了此功能,因此我不应该更改它。我想也许我必须调用deleteAll(b.begin()) 或b.end() 以从最左边或最右边的节点开始,但每次我在脑海中经历它时,我都会点击n == 0。
请帮助我理解。
【问题讨论】:
-
也许让它在每个函数的不同点打印,这样你就可以了解发生了什么:) 看起来它应该在当前代码中正常工作!
-
告诉你的老师字母 n 是为大小保留的。转念一想,不要。只要记住它。那个“if(0==n)”让我愣了一秒。
标签: c++ recursion binary-search-tree