【发布时间】:2015-04-17 13:41:18
【问题描述】:
我正在为二叉搜索树编写方法,但无法理解递归的基础知识。我找到了一种检查二叉搜索树大小的方法,我看到它是如何遍历树的每个元素的,但我不明白它是如何准确计算大小的。有人可以向我解释一下吗?
方法如下:
unsigned long BST::sizeHelper(BSTNode* r){
if (r == NULL){
return 0;
} else {
return (sizeHelper(r->left) + sizeHelper(r->right) + 1); //+1 for the root
}
}
我看到了 return 语句,但我没有看到任何迹象表明它是如何计算通过它们的元素的。
【问题讨论】:
-
你觉得
+ 1在那里做什么? -
@n.m.我认为 OP 理解 something 正在增加;我预计这种混淆是因为在任何地方都没有代表“当前计数”的单个变量。对吧,Xerunix?
-
@n.m.感谢您向我指出这一点。我实际上虽然 +1 添加了根,因为子树不包含它,但现在我意识到它正在将 +1 返回给调用它的递归方法。太感谢了。你也是凯尔。我没有意识到 return 关键字向调用它的方法返回了一个值……或者至少没有递归地考虑它。
-
您已经正确描述了它的工作原理。计算右手子树的大小,计算左手子树的大小,把它们加起来,加 1。为什么你认为你需要跟踪任何额外的信息,或者在某个地方有一个隐藏的计数器?或许您应该自己编写一个递归阶乘函数(将所有中间结果存储在命名变量中的函数)并使用调试器运行它。
-
@n.m.直到你让我质疑 +1 的作用之后,我才明白它是如何工作的。我以为它只是在计算根节点。