树的练习6--------938.二叉搜索树的范围和

题目:点这里

解法:

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int rangeSumBST(TreeNode* root, int low, int high) {
        int v=0;
        if(root==NULL){
            return 0;
        }
        if(root->val>=low&&root->val<=high){
            v = root->val;
        }
        return v+rangeSumBST(root->left,low,high)+rangeSumBST(root->right,low,high);
    }
};

正确的做法应该是,找到符合条件的,就加起来继续往下找,

递归的本质就是:当前节点的贡献+左子树的贡献+右子树的贡献,三者缺一不可。

错误解法:

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int rangeSumBST(TreeNode* root, int low, int high) {
        if(root==nullptr){
            return 0;
        }
        if(root->val>=low&&root->val<=high){
            return root->val;
        }
        return rangeSumBST(root->left,low,high)+rangeSumBST(root->right,low,high);
    }
};

我的错误代码思路就是在左子树里面找到符合要求的值,然后在右子树里面找到符合要求的值,最后把他们加起来,但这个题目的思路应该是依此判断根节点左子树右子树,最后把他们三者加起来。其实我后来醒悟过来了,但是我在做的时候一直想不到应该怎么去改变我的代码去实现对应的功能。

反思

根据题目的要求的特定思路,建立适宜的代码,要求返回加和的这种,就需要在递归过程中返回加和的结果。

相关推荐
Tisfy19 分钟前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
Nil20827 分钟前
leetcode 322零钱兑换
算法·leetcode·职场和发展
海绵宝宝转agent31 分钟前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi01142 分钟前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳42 分钟前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
Logic1011 小时前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理
扶风ff1 小时前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
程序员老陆1 小时前
C++ 多线程通信方式全景:从共享内存到结构化协调
开发语言·c++
yi0111 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
-dzk-1 小时前
【多维动态规划】LC 1143.最长公共子序列
算法·动态规划