我正在编写二叉搜索树的方法,并且无法理解递归的基础知识。我找到了一个检查二叉搜索树大小的方法,我看到它是如何通过树的每个元素的,但我不明白它是如何精确计算大小的。有人可以向我解释一下吗?
以下是方法:
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语句,但是我没有看到任何关于它如何计算元素的指示。
答案 0 :(得分:5)
每次返回时,该方法会将至少一个添加到总大小。 例如,请考虑以下树:
(我画画很糟糕,所以我在网上偷了一个)
步骤如下:
return size(B) + size(C) + 1
。return size(D) + 0 + 1
。 (0因为B没有正确的孩子,即NULL)return 0 + 0 + 1
。大小(D)= 1。return size(E) + size(F) + 1
。