混淆*和&与指针

时间:2019-05-09 12:51:25

标签: c++ pointers binary-search-tree

我正在进行leetCode演习,以求BST中所有在一定范围内的所有值相加。但是,我遇到了一些错误消息。从我的代码中,我认为我正在尝试做的事情很明显,但是我不确定如何使它起作用。

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
int sol;
public:
int rangeSumBST(TreeNode* root, int L, int R) {
    sol = 0;
    helper(root, L, R, sol);
    return sol;
}
 void helper(TreeNode* node, int L, int R, int ans) {
    if (!(node = NULL)) {
        if (L <= node->val && node->val <= R)
            ans += node->val;
        if (L < node->val)
            helper(node->left, L, R);
        if (node->val < R)
            helper(node->right, L, R);
    }
}

};

我知道我在用指针做错了,但我无法弄清楚。这是我的错误信息...

solution.cpp: In member function helper
Line 23: Char 40: error: no matching function for call to 
'Solution::helper(TreeNode*&, int&, int&)'
             helper(node->left, L, R);

任何建议或帮助将不胜感激。 谢谢

2 个答案:

答案 0 :(得分:2)

这与指针,*&无关。它与调用函数有关。

您的函数helper带有第四个参数ans(顺便说一句,它应该是一个引用),但是您没有在调用中传递该参数。您只传递了三个参数。

您还可以将node设置为NULL(使用==而不是=!)。

我建议这样做:

void helper(TreeNode* node, int L, int R, int& ans) {
    if (!(node == NULL)) {
        if (L <= node->val && node->val <= R)
            ans += node->val;
        if (L < node->val)
            helper(node->left, L, R, ans);
        if (node->val < R)
            helper(node->right, L, R, ans);
    }
}

您还可以考虑返回结果,而不是将其累加到引用参数中,但这需要对函数进行更多更改。

答案 1 :(得分:1)

'Solution :: helper'方法采用4个参数。