【LeetCode刷题(数据结构与算法)】:二叉搜索树的范围和

news2024/10/6 2:16:25

在这里插入图片描述
一、什么是二叉搜索树
二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树
二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质
非空左子树的所有键值小于其根结点的键值
非空右子树的所有键值大于其根结点的键值
左、右子树都是二叉搜索树
在这里插入图片描述
上图值为10的结点的右子树为7,比10小,不满足条件2,所以这棵树不是二叉搜索树
在这里插入图片描述
上图各个结点都满足条件,所以这棵树是二叉搜索树
在这里插入图片描述
上图各个结点都满足条件,所以这棵树也是二叉搜索树
看完上面的介绍后,相信大家都对什么是二叉搜索树有了较为清晰的认识。接下来说一下二叉搜索树的一些基本操作
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和
在这里插入图片描述
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15
输出:32
在这里插入图片描述
在这里插入图片描述
输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10
输出:23

方法:深度优先搜索

思路
按深度优先搜索的顺序计算范围和。记当前子树根节点为 root\textit{root}root,分以下四种情况讨论:
root 节点为空
返回 0
root 节点的值大于 high
由于二叉搜索树右子树上所有节点的值均大于根节点的值,即均大于 high,故无需考虑右子树,返回左子树的范围和
root 节点的值小于 low
由于二叉搜索树左子树上所有节点的值均小于根节点的值,即均小于low,故无需考虑左子树,返回右子树的范围和
root节点的值在[low,high] 范围内
此时应返回root 节点的值、左子树的范围和、右子树的范围和这三者之和

/**
 * 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;
    }
    if(root->val>high)
    {
        return rangeSumBST(root->left,low,high);
    }
    if(root->val<low)
    {
        return rangeSumBST(root->right,low,high);
    }
    return root->val+rangeSumBST(root->left, low, high)
    +rangeSumBST(root->right,  low,  high);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Typora使用教程

相关介绍 Typora是一款所写即所得的Markdown编辑器&#xff0c;支持跨平台Window,Linux和Mac都可以。 相关链接 Typora安装包历史版本地址&#xff1a;官网历史版本地址 问题及知识点汇总 关于图片的问题-设置图像自动复制到自己指定文件夹下 问题描述 在写笔记的过程中&am…

Write-Ahead Log(PostgreSQL 14 Internals翻译版)

日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障&#xff0c;RAM中的所有内容都将丢失&#xff1b;只有写入磁盘的数据才会被保留。要在故障后启动服务器&#xff0c;必须恢复数据一致性。如果磁盘本身已损坏&#xff0c;则必须通过备份恢复来解决相同的问题。 理论…

C++ 类和对象(上)------超详细解析,小白必看系列

目录 一、前言 二、面向过程和面向对象初步认识 三、类的引入 三、类的定义 四、类的访问限定符及封装 &#x1f4a6;访问限定符 &#xff08;重点&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; &#x1f4a6;封装 五、类的作用域 六、类的实例化 …

算法--排序算法效率比较

《算法设计与分析》课程实验报告 &#xff08; 实验一&#xff09; 实验名称&#xff1a;排序算法效率比较 实验地点&#xff1a; 所使用的开发工具及环境&#xff1a; PC机&#xff0c;DEV 一、实验目的&#xff1a; 比较至少 4 种排序&#xff08;从小到大排&#xff09…

从十月稻田,看大米为何能卖出200亿市值?

国无农不稳&#xff0c;民无粮不安。新时代的农村农民&#xff0c;需要现代化的农业作依托&#xff0c;而在农业现代化的过程中&#xff0c;品牌化、数字化成为至关重要的一环。 金秋十月&#xff0c;从南到北&#xff0c;从东到西&#xff0c;中国农村的每一块土地都洋溢着丰…

【运筹优化】运筹学导论:线性规划导论

文章目录 一、原形范例&#xff08;Wyndor Glass 公司&#xff09;1.1 线性规划模型构建1.2 图解法1.3 结论 二、线性规划模型2.1 线性规划模型的标准形式2.2 其他形式2.3 模型解的术语 三、有关线性规划的假设3.1 比例性3.2 可加性3.3 可分割性3.4 确定性 四、补充例子4.1 放射…

ant的basedir内置属性

basedir是ant的内置属性&#xff0c;代表项目基础路径的绝对路径。它的默认值等于build文件的父目录。当然&#xff0c;可以通过project 的basedir 属性、或者单独的basedir 属性来覆盖。 例如&#xff0c;在工程的根目录下有个build.xml文件&#xff1a; build.xml文件的内…

java springboot 实现 对象或对象数组 转为 前端可解析的JSON字符串格式

这是我的接口代码 逻辑就是 通过 IBookService对象中的 list 函数获取数据列表 然后定义 state(响应状态) message(提示信息) 最后将这三个信息 做成对象返回给前端 接口访问结果 但是这种对象数组对存储空间消耗肯定是比字符串大很多的 所以 我们来尝试 将json数组转成字符…

JOSEF约瑟 漏电继电器 JHOK-ZBG1 φ25mm AC220V 0.1A/0.1S 分体式

系列型号 JHOK-ZBG1 φ25mm漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG2 φ25mm漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG1 φ45mm漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG2 φ45mm 漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBG1 φ100mm漏电&a…

广西建筑模板厂家批发——能强优品木业

随着建筑业的蓬勃发展&#xff0c;建筑模板作为不可或缺的基础材料&#xff0c;在工程施工中扮演着重要的角色。在广西&#xff0c;能强优品木业有限公司作为一家备受瞩目的建筑模板厂家批发商&#xff0c;以其卓越的产品品质和优质的服务在行业中脱颖而出。 实力厂家扎根广西 …

电影《前任4:英年早婚》观后感

刚刚国庆节后&#xff0c;没有什么上新电影&#xff0c;只能看国庆节时的电影了&#xff0c;于是选择了这部《前任4&#xff1a;英年早婚》&#xff0c;原本是非常抗拒看这样的电影了&#xff0c;毕竟自己作为单身狗&#xff0c;还是不喜欢吃狗粮的&#xff0c;不过从另一方面讲…

JOSEF约瑟 轨道继电器 CSN-11 DC220V 二转换 35mm导轨安装 大功率启动大于5W

CSN-11轨道继电器 一、用途 该继电器用于电力系统接口设备可与保护装置&#xff0c;安全自动装置等设备接口实现开入隔离&#xff0c;开出重动功能&#xff0c;用于开关量的隔离及转换。CSN-11继电器特点是启动功率大抗力强。采用标准35mm导轨安装。 二、技术参数 1.额定电…

C++算法:给表达式添加运算符

题目 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target &#xff0c;在 num 的数字之间添加 二元 运算符&#xff08;不是一元&#xff09;、- 或 * &#xff0c;返回 所有 能够得到 target 的表达式。 注意&#xff0c;返回表达式中的操作数 不应该 包含前导零。…

行情分析——加密货币市场大盘走势(10.18)

大饼昨日小幅度的下跌回调了&#xff0c;很快又上涨。目前看下来震荡向下刚刚开始&#xff0c;可以关注后续情况。大饼依然保持看空不做空&#xff0c;目前除了独立行情的币&#xff0c;就大饼非常强势。目前从MACD日线来看&#xff0c;还是保持多头趋势&#xff0c;预计明后两…

6-2 进制转换 分数 10

Status SPush(SqStack& s, ElemType x) {if (s.top s.stacksize) //栈满return ERROR;s.data[s.top] x;s.top;//1条或2条语句均可return OK; } Status SPop(SqStack& s, int& e) {if (s.top 0) //栈空return ERROR;s.top--; //S.top下移e s.data[s.top]; //把…

WhatsApp 私域营销指南

当涉及到WhatsApp私域营销时&#xff0c;企业正逐渐意识到这个强大工具的潜力&#xff0c;为建立与用户之间更紧密的关系、提供个性化的服务和推广&#xff0c;以及增加用户忠诚度&#xff0c; WhatsApp已成为一个不可或缺的营销渠道。在如今竞争激烈的市场中&#xff0c;私域营…

SSTI模板注入(flask) 学习总结

文章目录 Flask-jinja2 SSTI 一般利用姿势SSTI 中常用的魔术方法内建函数 利用 SSTI 读取文件Python 2Python 3 利用 SSTI 执行命令寻找内建函数 eval 执行命令寻找 os 模块执行命令寻找 popen 函数执行命令寻找 importlib 类执行命令寻找 linecache 函数执行命令寻找 subproce…

腾讯待办将全面停止运营?关停后有什么其他的好用待办软件推荐

微信是很多用户的手机上必下载的软件。在微信中&#xff0c;可以使用各种各样的功能&#xff0c;其中就包括小程序。在微信小程序中&#xff0c;有不少用户都在使用腾讯待办这款工具&#xff0c;它可以记录待办事项&#xff0c;打钩标记完成&#xff0c;还能通过公众号接收待办…

LeetCode26——删除有序数组中的重复项

LeetCode26——删除有序数组中的重复项 自己的暴力解&#xff08;假设可以使用额外的空间&#xff09;&#xff1a; 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) package keepcoding.leetcode.leetcode26; /*给你一个 非严格递增排列 的数组 nums &#xff0c;请…