我正在进行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);
任何建议或帮助将不胜感激。 谢谢
答案 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个参数。