【leetcode】938. 二叉搜索树的范围和(range-sum-of-bst)(dfs)[简单]

2023-05-16

链接

https://leetcode-cn.com/problems/range-sum-of-bst/

耗时

解题:21 min
题解:8 min

题意

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

提示:

  • 树中节点数目在范围 [1, 2 * 10^4] 内
  • 1 <= Node.val <= 10^5
  • 1 <= low <= high <= 10^5
  • 所有 Node.val 互不相同

思路

因为是 BST,所以 dfs 遍历整棵树,如果当前节点值小于 low,直接到右子树去找,如果当前节点值大于 high,直接到左子树去找,剩下的情况就是符合范围的值,将当前节点值加入答案。

时间复杂度: O ( n o d e ) O(node) O(node)

AC代码

/**
 * 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 == NULL) return 0;
        
        int now_val = 0, l_sum = 0, r_sum = 0;
        if(root->val < low) {
            r_sum = rangeSumBST(root->right, low, high);
        }
        else if(root->val > high) {
            l_sum = rangeSumBST(root->left, low, high);
        }
        else {
            now_val = root->val;
            if(root->val > low) {
                l_sum = rangeSumBST(root->left, low, high);
            }
            if(root->val < high) {
                r_sum = rangeSumBST(root->right, low, high);
            }
        }
        
        return now_val + l_sum + r_sum;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】938. 二叉搜索树的范围和(range-sum-of-bst)(dfs)[简单] 的相关文章

  • 如何测试两个时间范围是否重叠?

    我需要实现预订功能并确保预订不会在 Rails 应用程序中重叠 The cover and between 方法不太符合我的需要 与同一模型上的其他潜在范围相比 我必须确保时间范围的唯一性 并高效地做到这一点 我认为可以使用overlaps
  • 对 BigIntegers 列表求和

    我已经查看了所有内容 但无法弄清楚这一点 如何对 BigIntegers 列表求和 Using System Numerics Using System Linq List
  • Sum(Case when) 导致选择的多行

    我有一张巨大的客户订单表 我想运行一个查询来按 user id 按月列出过去 13 个月的订单 我现在所拥有的 如下 可以工作 但不是只为每个 user id 列出一行 而是为 user id 的每个订单列出一行 例如 一个用户一生中总共有
  • 汇总分钟到小时的需求

    我不知道我是否在这个问题的正确部分 我环顾四周并没有找到答案 所以这是我的问题 我有一个 CSV 文件 订购如下 dat lt read csv text Date Demand 01 01 2012 00 00 00 5061 5 01
  • MySQL 中的 SELECT 整数范围。例如。 1,2,3,4,...,n;

    我需要在 MySQL 中选择整数范围 像这样的东西 SELECT RANGE 10 20 AS range returns 10 11 12 13 14 20 Why 我想从尚未注册的范围中选择随机电话号码 这是想法 SELECT RANG
  • PostgreSQL:间隔“10 天”和当前行之间的范围

    我有一张表 用于存储每件商品的每日价格 如果价格尚未更新 则当天没有该商品的记录 我需要编写一个查询 为每个商品检索最新价格 并具有从当前行日期起 10 天的回溯窗口 否则返回NULL 我想用一个来实现这一点RANGE BETWEEN IN
  • numpy `arange` 超过最终值

    我原以为 numpy 的arange start end 生成 start end 范围内的值 下面的示例表明这并不总是正确的 最终值大于end import numpy as np start 2e9 end start 321 step
  • 如何按 DATE_FORMAT(date,'%Y-%m-%d') 限制 20 对值求和,如果大于 20,则对剩余值求和?

    如何求和DATE FORMAT date Y m d id 前 20 行数据 如果大于 20 则对剩余值求和 否则为 0 假设我有以下数据和以下 SQL 该怎么做 非常感谢您的任何建议 SELECT SUM value id DATE FO
  • 当 Html 输入范围“step”不是范围“max”值的倍数时

    我遇到的情况是 我的范围滑块的步长不是最大值的倍数 因此滑块值仅变为 90 因为下一步将大于 100 片段
  • 多个 jQuery-UI 滑块的合计

    我正在尝试实现一个有 4 个 jQuery UI 滑块的页面 并且我想让所有 4 个滑块的总数永远不会超过 400 我不介意以哪种方式实现这一点 它可以从 0 开始 一旦您更改 1 个滑块 剩余的可用总数就会减少 或者将滑块设置为超过最大值
  • Groovy:从两个范围创建二维数组

    我想创建这个 1 1 1 2 1 3 2 1 6 3 使用 GroovyConsole 我一直在尝试这样的事情 def blob 1 6 collect i gt 1 3 collect j gt i j println blob blob
  • 在Python中跳过范围函数中的值

    循环一系列数字并跳过一个值的Python式方法是什么 例如 范围是从 0 到 100 我想跳过 50 编辑 这是我正在使用的代码 for i in range 0 len list x listRow list i for j in ran
  • 自己的图像作为范围内的滑块拇指。如何在CSS上设置样式

    如何使用 css 将图像设置为范围输入类型上的拇指滑块 它在 Internet Explorer 中不起作用 Chrome 和 Firefox 没问题 但在 IE 上我的图像被隐藏了还是怎么的 我用 ms thumb 并尝试将图像设置为背景
  • 在matlab中对矩阵元素求和的有效(最快)方法

    让我们有矩阵A say A magic 100 我见过两种计算矩阵所有元素之和的方法A sumOfA sum sum A Or sumOfA sum A 其中一个比其他更快 或更好的练习 吗 如果有的话是哪一个 或者它们都同样快 看来你无法
  • 当我加入第二个表时总和不正确

    这是我第一次请求你的帮助 实际上我必须创建一个查询 并为其做了一个类似的示例 我有两张桌子 Report ReportID Date headCount Production ProdID ReportID Quantity 我的问题是使用
  • 尝试访问工作表范围时出现 VBA 运行时错误 1004

    我正在构建一个小型 vba 脚本 该脚本将多个工作簿中的表合并到另一个工作簿的一个工作表中 当我尝试设置目标范围的值时 出现错误 wksPivotData Range wksPivotData Cells CurrentRow 1 Resi
  • Python 单行代码

    我想要用 Python 编写以下代码的单行解决方案 但是如何实现呢 total 0 for ob in self oblist total sum v amount for v in ob anoutherob 它返回总价值 我想要它是单行
  • 第 n 行到最后一行的总和

    我想在电子表格顶部创建一个 TOTAL 行 在此行中 每个单元格应为 TOTAL 行下方列中的值的总和 例如 如果总行数是第 1 行 则单元格 A1 应该是 A2 到 A 列最后一行的总和 电子表格中的行数会随着时间的推移而增长 所以我不能
  • Python 字典组并对多个值求和[重复]

    这个问题在这里已经有答案了 我在字典格式列表中有一组数据 如下所示 data name A tea 5 coffee 6 name A tea 2 coffee 3 name B tea 7 coffee 1 name B tea 9 co
  • 如何有效地计算 Perl 中覆盖给定范围的范围?

    我有一个大约 30k 范围的数据库 每个范围都作为一对起点和终点给出 12 80 34 60 34 9000 76 743 我想编写一个 Perl 子例程来表示一个范围 不是来自数据库 并返回数据库中完全 包含 给定范围的范围数 例如 如果

随机推荐