Запутался * и & с указателями - PullRequest
0 голосов
/ 09 мая 2019

Я работаю над упражнением 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 ]

2 голосов
/ 09 мая 2019

Это не имеет ничего общего с указателями или * или &.Это связано с вызовом функций.

Ваша функция 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 голос
/ 09 мая 2019

Метод 'Solution :: helper' принимает 4 параметра.

...