C++ 如何计算给定数字在二叉树中出现的次数?

C++ 如何计算给定数字在二叉树中出现的次数?,c++,recursion,binary-tree,C++,Recursion,Binary Tree,有人能告诉我为什么我的代码不起作用吗?我试图使用递归计算给定值在二叉树中出现的次数。然而,这种方法不起作用。我非常感谢您的反馈和见解。多谢各位 public int valCount(int val) { if (root == null) { return 0; } return valCount(val, *root); } public int valCount(int val, Node *root) { int cnt = 0; if

有人能告诉我为什么我的代码不起作用吗?我试图使用递归计算给定值在二叉树中出现的次数。然而,这种方法不起作用。我非常感谢您的反馈和见解。多谢各位

public int valCount(int val) {
    if (root == null) {
        return 0;
    }
    return valCount(val, *root);
}

public int valCount(int val, Node *root) {
  int cnt = 0;
  if (root->left != null) {
    if (root->data == val) {
        cnt++;
    }
    int leftValCount = valCount(val, root->left);
  }
  if (root->right != null) {
    if (root->data == val) {
        cnt++;
    }
    int rightValCount = valCount(val, root->right);
  }
  return cnt + leftValCount + rightValCount;
}

递归中的一个常见错误是担心堆栈帧而不是当前帧。让递归为您完成这项工作。遵循这条经验法则可以使代码更容易推理

算法很简单:对于每个节点,如果当前节点与目标值匹配,则返回1;如果不匹配,则返回0,并在左、右子树上添加调用相同函数的结果。基本情况是使用空根调用函数时,返回0

int valCount(int val, Node *root) {
    if (!root) return 0;

    return (root->val == val ? 1 : 0) + 
           valCount(val, root->left) + 
           valCount(val, root->right);
}

“不工作”是什么意思?你能举个例子吗?这真的是C++吗?代码> public int //>和<代码> null <代码>不是标准C++的一部分。