我正在做一个编程作业并编写一堆函数来实现二叉搜索树,并给出了一些函数。我以为我理解递归,但如果你愿意的话,我一直对切换方向感到困惑。
这是分配给定的函数:
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.
请帮我理解。