首页 > 解决方案 > 对 * 和 & 与指针感到困惑

问题描述

我正在做一个 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);

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

标签: c++pointersbinary-search-tree

解决方案


*这与指针或与或与没有太大关系&。它与调用函数有关。

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

您还继续设置nodeNULL==不使用=!)。

我建议这样做:

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);
    }
}

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


推荐阅读