如果没有计数器,递归方法如何计算?

时间:2015-04-17 05:16:38

标签: c++ recursion

我正在编写二叉搜索树的方法,并且无法理解递归的基础知识。我找到了一个检查二叉搜索树大小的方法,我看到它是如何通过树的每个元素的,但我不明白它是如何精确计算大小的。有人可以向我解释一下吗?

以下是方法:

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 个答案:

答案 0 :(得分:5)

每次返回时,该方法会将至少一个添加到总大小。 例如,请考虑以下树:

enter image description here
(我画画很糟糕,所以我在网上偷了一个)

步骤如下:

  1. 从A开始,return size(B) + size(C) + 1
  2. 对于B,return size(D) + 0 + 1。 (0因为B没有正确的孩子,即NULL)
  3. 对于D,return 0 + 0 + 1。大小(D)= 1。
  4. 现在返回,尺寸(B)= 1 + 1 = 2.
  5. 对于C,return size(E) + size(F) + 1
  6. 与D类似,尺寸(E)=尺寸(F)= 1。
  7. 再回头,尺寸(C)= 1 + 1 + 1 = 3.
  8. 最后,尺寸(A)= 2 + 3 + 1 = 6.