c++ - 对 * 和 & 与指针感到困惑
问题描述
我正在做一个 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);
任何建议或帮助将不胜感激。谢谢
解决方案
*
这与指针或与或与没有太大关系&
。它与调用函数有关。
您的函数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);
}
}
您也可以考虑返回结果而不是将其累积到引用参数中,但这需要对您的函数进行更多更改。
推荐阅读
- html - 我的指向其他 html 页面的 href 链接不起作用
- python - Python SQL executemany 语句不起作用
- c# - DLL 自动添加到构建输出中
- hive - hue 'charmap' 编解码器无法对位置 35-36 中的字符进行编码:字符映射到
- angular - 垫表排序标题问题
- php - Yii2,如何在 leftjoin 上添加 LIMIT 以仅返回 1 个结果
- mysql - 将 2 个不同时间范围的相似查询合并为 1 个,而不是使用 UNION ALL
- sql - 查找所有不包含所提供资源的人员
- ionic-framework - 具有多租户和多域 JHipster 后端的 Ionic 中的 CSRF
- kubernetes - Kubernetes - 允许具有命名空间的 ClusterRole?