【手把手带你刷LeetCode】——11.二叉搜索树的范围和(DFS)

简介: .二叉搜索树的范围和(DFS)

【前言】

今天是力扣打卡第11天!

感谢铁汁们的陪伴,一起加油鸭!!

在第9天的时候写过这道题的递归解题方法,其实DFS使用的解题思想就是递归,所以大同小异啦。大家简单看一下纯递归的解法:

https://blog.csdn.net/weixin_57544072/article/details/121196600?spm=1001.2014.3001.5502

原题:二叉搜索树的范围和(DFS解法)

题目描述:

给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。

示例1:

 

输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32


示例2:

输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23


题解 :

全都在代码里头咯。

代码执行:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
int rangeSumBST(struct TreeNode* root, int low, int high){
    // //方法一:递归法
    // //找边界
    // if(root == NULL){
    //     return 0;
    // }
    // //左子树
    // int leftSum = rangeSumBST(root->left, low, high);
    // //右子树
    // int rightSum = rangeSumBST(root->right, low, high);
    // int result = leftSum + rightSum;
    // //判断根节点
    // if(root->val >= low && root->val <= high){
    //     result += root->val;
    // }
    // return result;
    //方法二:DFS
    //判断特殊情况
    if(root == NULL){
        return 0;
    }
    //如果根节点的值大于high,那么右子树不满足,此时只需要判断左子树
    if(root->val > high){
        return rangeSumBST(root->left, low, high);
    }
    //如果根节点的值小于low,那么左子树一定不满足,此时只需要判断右子树
    if(root->val < low){
        return rangeSumBST(root->right, low, high);
    }
    //否则如果根节点的值在low和high之间,那么三者都需要判断
    return root->val + rangeSumBST(root->left, low, high) + rangeSumBST(root->right, low, high);
}

复杂度分析:

时间复杂度:O(N), 取决于二叉搜索树的节点数;

空间复杂度:O(N),取决于递归调用栈空间的开销。

总结:

今天是力扣打卡第11天!

时间很紧,博主和铁汁们一起坚持,加油!!


相关文章
|
5月前
|
分布式计算 算法 Go
【LeetCode 热题100】BFS/DFS 实战:岛屿数量 & 腐烂的橘子(力扣200 / 994 )(Go语言版)
本文讲解了两道经典的图论问题:**岛屿数量(LeetCode 200)** 和 **腐烂的橘子(LeetCode 994)**,分别通过 DFS/BFS 实现。在“岛屿数量”中,利用深度或广度优先搜索遍历二维网格,标记连通陆地并计数;“腐烂的橘子”则采用多源 BFS,模拟腐烂传播过程,计算最短时间。两者均需掌握访问标记技巧,是学习网格搜索算法的绝佳实践。
202 1
|
5月前
|
Go
【LeetCode 热题100】BFS/DFS 实战:岛屿数量 & 腐烂的橘子(力扣200 / 994 )(Go语言版)
本篇博客详细解析了三道经典的动态规划问题:198. 打家劫舍(线性状态转移)、279. 完全平方数与322. 零钱兑换(完全背包问题)。通过 Go 语言实现,帮助读者掌握动态规划的核心思想及其实战技巧。从状态定义到转移方程,逐步剖析每道题的解法,并总结其异同点,助力解决更复杂的 DP 问题。适合初学者深入理解动态规划的应用场景和优化方法。
144 0
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
83 1
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
97 1
|
Python
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
128 4
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
|
Python
【Leetcode刷题Python】96. 不同的二叉搜索树
LeetCode 96题 "不同的二叉搜索树" 的Python解决方案,使用动态规划算法计算由1至n互不相同节点值组成的二叉搜索树的种数。
100 3
【Leetcode刷题Python】96. 不同的二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
122 0
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
75 0
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
141 0
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
94 0

热门文章

最新文章