我正在做一个编程作业并编写一堆函数来实现二叉搜索树,并给出了一些函数。我以为我理解递归,但如果你愿意的话,我一直对切换方向感到困惑。
这是分配给定的函数:
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)
。当然没有左节点。当我添加 lefty 节点时,我的构造函数将 left、right 和 parent 指针初始化为 0,所以 now n == 0
. 所以我退出了函数并且永远不会删除 righty。我怎么去deleteAll(n->right)
?
正如我所说,提供了此功能,因此我不应该更改它。我想也许我必须调用deleteAll(b.begin())
或b.end()
从最左边或最右边的节点开始,但每次我在脑海中通过它时,我都会点击n == 0
.
请帮我理解。