树的练习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);
    }
};

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

反思

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

相关推荐
怪兽学LLM11 小时前
LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)
python·算法·leetcode
满怀冰雪11 小时前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
CC数学建模11 小时前
2026年江西省研究生数学建模竞赛1题:空间数据分析中的过拟合识别完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
leo__52011 小时前
MATLAB实现牧羊人算法
开发语言·算法·matlab
视觉小萌新11 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
Gauss松鼠会11 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
Tisfy11 小时前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
fpcc11 小时前
C++编程实践—C++实现类似Qt的信号槽机制
c++·qt
葬送的代码人生11 小时前
JavaScript 数组完全指南:从入门到实战
前端·javascript·算法
格发许可优化管理系统11 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++