【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
文章目录
- 计算布尔二叉树的值
- 求根节点到叶节点的数字之和
- 二叉树剪枝
- 验证二叉搜索树
- 二叉搜索树中第K小的元素
- 二叉树的所有路径
计算布尔二叉树的值
解题思路:
- 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1,非叶子节点值为 2(表示 OR 操作)或 3(表示 AND 操作)。
可以使用递归来评估布尔树:
如果当前节点是叶子节点,直接返回其布尔值(0 为 False,1 为 True)。
否则,递归评估左右子树。
如果当前节点值为 2,返回左右子树的“或”运算结果;如果为 3,返回“与”运算结果。

class Solution
{
public:bool evaluateTree(TreeNode* root) {// 如果是叶节点,返回节点值的布尔结果if(root->left == nullptr) return root->val == 0 ? false : true;// 递归计算左子树的布尔值auto left = evaluateTree(root->left);// 递归计算右子树的布尔值auto right = evaluateTree(root->right);// 根据节点值来决定使用哪种布尔运算// 2 表示 OR 运算,3 表示 AND 运算return root->val == 2 ? left | right : left & right; }
};
求根节点到叶节点的数字之和
解题思路:
- 要计算从根节点到叶节点路径所表示的所有数字的总和。
递归遍历每条路径,沿途维护一个当前的数字值,将每个节点的值添加到数字的末尾。
如果到达叶子节点,将当前生成的数字添加到总和中。
返回所有根到叶路径数字的总和。

class Solution
{
public:// 主函数,调用辅助的深度优先搜索函数,初始累加和为0int sumNumbers(TreeNode* root) {return dfs(root, 0);}// 深度优先搜索函数,用于计算从根到叶节点的路径和int dfs(TreeNode* root, int presum){// 将当前节点的值加入路径值,乘以10以表示其位数presum = presum * 10 + root->val;// 如果当前节点是叶节点,直接返回累加的路径和if (root->left == nullptr && root->right == nullptr) return presum;int ret = 0;// 递归处理左子树,并累加路径和if (root->left) ret += dfs(root->left, presum);// 递归处理右子树,并累加路径和if (root->right) ret += dfs(root->right, presum);// 返回累加的路径和return ret;}
};
二叉树剪枝
解题思路:
- 需要剪除二叉树中所有的子树,如果整个子树中没有 1,就删除该子树。
可以使用后序遍历递归判断每个节点的左右子树:
先递归处理左子树和右子树。
如果左子树没有 1,则将左子树置为 None;如果右子树没有 1,则将右子树置为 None。
最后,判断当前节点是否为 1 或其子树是否包含 1,如果都没有,返回 None,否则返回当前节点。

class Solution
{
public:// 主函数,调用递归函数修剪二叉树TreeNode* pruneTree(TreeNode* root) {// 如果节点为空,直接返回空if (root == nullptr) return nullptr;// 递归处理左子树和右子树root->left = pruneTree(root->left);root->right = pruneTree(root->right);// 如果当前节点的值为0,且左右子树均为空,删除当前节点(设为nullptr)if (root->left == nullptr && root->right == nullptr && root->val == 0){root = nullptr;}// 返回处理后的节点return root;}
};
验证二叉搜索树
解题思路:
- 验证二叉树是否为二叉搜索树(BST),即所有左子树节点值均小于当前节点,所有右子树节点值均大于当前节点。
可以通过递归设定上下边界来验证每个节点:
对于根节点,其值在 (−∞, +∞) 范围内。
对于左子节点,设定其值范围为 (min, 当前节点值)。
对于右子节点,设定其值范围为 (当前节点值, max)。
如果所有节点都符合条件,则该树是 BST。

class Solution
{long prev = LONG_MIN; // 用于记录前一个节点的值,初始为最小值
public:// 验证二叉搜索树的主函数bool isValidBST(TreeNode* root) {// 如果节点为空,说明是合法的子树if (root == nullptr) return true;// 检查左子树是否为有效的二叉搜索树bool left = isValidBST(root->left);// 当前节点的有效性检查bool ret = false;if (root->val > prev) ret = true; // 当前节点值必须大于前一个节点值prev = root->val; // 更新前一个节点的值// 检查右子树是否为有效的二叉搜索树bool right = isValidBST(root->right);// 只有左子树、右子树都是有效BST,且当前节点符合条件时,返回truereturn left && right && ret; }
};
二叉搜索树中第K小的元素
解题思路:
- 由于 BST 的中序遍历会按从小到大的顺序输出节点值,因此可以通过中序遍历找到第 k 小的元素。
进行中序遍历并计数,当计数达到 k 时,当前节点即为第 k 小的节点。
优化:如果只找到第 k 小的节点后停止遍历,可以减少不必要的遍历。

class Solution
{int count; // 记录剩余的步数,找到第 k 小的元素int ret; // 用于存储第 k 小的元素值
public:// 主函数,初始化 count 并调用深度优先搜索int kthSmallest(TreeNode* root, int k) {count = k;dfs(root);return ret;}// 中序遍历二叉搜索树的递归函数void dfs(TreeNode* root){// 如果节点为空,直接返回if (root == nullptr) return;// 递归遍历左子树dfs(root->left);// 访问当前节点,更新 countcount--;if (count == 0) ret = root->val; // 当 count 减到 0 时,找到第 k 小的元素// 递归遍历右子树dfs(root->right);}
};
二叉树的所有路径
解题思路:
- 需要找到二叉树中所有从根节点到叶节点的路径。
通过 DFS(深度优先搜索)来遍历每一条路径,沿途构建路径字符串:
如果当前节点是叶节点,将当前路径字符串加入结果列表。
如果不是叶节点,继续递归其左右子树,构建路径字符串(添加 -> 以表示路径)。
最终返回所有路径的字符串列表。

class Solution
{
public:vector<string> ret; // 用于存储所有从根到叶节点的路径vector<string> binaryTreePaths(TreeNode* root) {string path; // 当前路径字符串dfs(root, path); // 调用深度优先搜索return ret;}// 深度优先搜索函数,用于生成根到叶节点的路径void dfs(TreeNode* root, string path){// 将当前节点的值转换为字符串并加入路径path += to_string(root->val);// 如果当前节点是叶节点,将路径加入结果集if (root->left == nullptr && root->right == nullptr){ret.push_back(path);return;}// 如果不是叶节点,继续遍历,路径加上 "->"path += "->";// 遍历左子树和右子树if (root->left) dfs(root->left, path);if (root->right) dfs(root->right, path);}
};
相关文章:
【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路: 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1࿰…...
【计算机视觉】FusionGAN
1. FusionGAN论文阅读 abreheret/FusionGAN: Pytorch implementation of "Generating a Fusion Image: One’s Identity and Another’s Shape" 1.1. WHY 在现实世界中,将对象或人物转换为期望的形状是一种常用技术,但现有的图像翻译方法在处理身份和形状时存在…...
问:SQL优化,七条实践总结?
SQL语句优化是数据库性能调优的重要部分,通过合理的优化可以显著提升查询速度和系统性能。文章总结几种常见SQL语句优化方法。 1. 优化Where子句的顺序 原则:表之间的连接条件应写在其他Where条件之前,能够过滤掉最大数量记录的条件应优先写…...
unity单例模式的不同声明(待完善
总结: 这段代码实现了一个泛型单例模式(Singleton Pattern),用于确保某个类(由泛型参数 T 指定)在整个应用程序中只有一个实例,并且在第一次访问时才创建该实例。该模式保证了该实例的全局唯一…...
大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手
本文来自腾讯蓝鲸智云社区用户: CanWay 背景 1、运维转型背景 蓝鲸平台从诞生之初,就一直在不遗余力地推动运维转型,让运维团队可以通过一体化PaaS平台,快速编写脚本,编排流程,开发运维工具,从被动地提供…...
vue2,vue3响应式的理解
vue2的话主要使用的是defineProperty对已有属性添加get,set,从而完成对数据的响应式控制,但每次需要for循环对属性进行遍历 function DefineReactive(target, key, value) {//存在多层嵌套的objectObserver(value);Object.defineReactive(target, key, {get() {retu…...
群控系统服务端开发模式-应用开发-前端退出功能
我们从未登录一直到退出,现在已经登录到操作,现在完成退出。退出有两种情况下会退出:第一种情况下是手动点击退出按钮,第二种情况下是登录过期时间到了自动退出的。 一、手动退出 因退出及个人信息页面都在公有页面,所…...
Web入门
Spring 官网:Spring | Home Spring是一个开源的Java企业级应用开发框架。Spring的主要目的是使Java EE(Java Platform, Enterprise Edition)开发更容易,并且通过提供一系列丰富的库和接口来促进良好编程实践,是…...
基于SpringBoot网上超市的设计与实现录像
基于SpringBoot网上超市的设计与实现录像 SpringBoot网上超市的设计与实现录像...
python爬虫(二)爬取国家博物馆的信息
import requests from bs4 import BeautifulSoup# 起始网址 url https://www.chnmuseum.cn/zx/xingnew/index_1.shtml # 用于存储所有数据 all_data [] page 1 global_index 1 # 定义全局序号变量并初始化为1 while True:html_url requests.get(url).textif requests.get…...
【mysql的当前读和快照读】
在MySQL中,尤其是InnoDB存储引擎中,读操作主要分为两种:当前读(Current Read)和快照读(Snapshot Read) 当前读 当前读每次读取的都是当前最新的数据。这种读操作在读取数据时不允许其他事务对这…...
[CKS] Audit Log Policy
最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于audit policy的题目。 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Netw…...
【Linux】-学习笔记03
第十一章-管理Linux软件包和进程 1.源码下载安装软件 1.1概念 源码文件:程序编写者使用C或C等语言编写的原始代码文本文件 源码文件使用.tar.gz或.tar.bz2打包成压缩文件 1.2特点 源码包可移植性好,与待安装软件的工作环境依赖性不大 由于有编译过程…...
Leetcode热题100-32 最长有效括号
Leetcode热题100-32 最长有效括号 1. 题目描述2. 解题思路动态规划栈解法 3. 代码实现动态规划栈解法 1. 题目描述 32 最长有效括号 2. 解题思路 动态规划 定义状态: 设 dp[i] 表示以位置 i 结尾的最长有效括号子串的长度。 状态转移方程: 遍历字符…...
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件,这个文件中会存在hbase中的数据以kv类型显示,同时还会存在hbase的元数据信息,包括整个hfile文件的索引大小&…...
A027-基于Spring Boot的农事管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
Redisson的可重入锁
初始状态: 表示系统或资源在没有线程持有锁的情况下的状态,任何线程都可以尝试获取锁。 线程 1 获得锁: 线程 1 首次获取了锁并进入受保护的代码区域。 线程 1 再次请求锁: 在持有锁的情况下,线程 1 再次请求锁&a…...
SQL Server Service Broker完整示例
目录 准备 创建Message,Contract,Queue和Service 创建调用存储过程 启用SQL Agent并创建Job执行存储过程 调用demo 常见故障排除 准备 判断你的数据库YourDatabaseName是否启用了Service Broker SELECT is_broker_enabled FROM sys.databases WH…...
CentOS7 升级OpenSSH9.0全过程和坑
近日,漏洞肆虐,需要升级新版本,才能解决漏洞。故有此文: 0 查看当前版本 [root@host-testsvc openssh-9.0p1]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 20171、在data下新建一个独立目录openssh目录,用来存放软件 [root@host-testsvc data]# mkdir openssh…...
RSTP的配置
RSTP相对于STP在端口角色、端口状态、配置BPDU格式、配置BPDU的处理方式、快速收敛机制、拓扑变更机制和4种保护特性方面的详细改进说明: 端口角色: STP中定义了三种端口角色:根端口(Root Port)、指定端口࿰…...
终极指南:如何用免费C工具快速管理天龙八部单机版游戏数据
终极指南:如何用免费C#工具快速管理天龙八部单机版游戏数据 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 还在为《天龙八部》单机版的数据管理而烦恼吗?TlbbGmTool是一款专为…...
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用
中控SCADA的VBS脚本玩不转了?试试用Python来“降维打击”,搞定复杂数据处理与模型调用 在工业自动化领域,中控SCADA系统长期扮演着数据采集与监控的核心角色。然而,当项目需求从简单的数据记录升级到需要复杂分析、预测性维护或实…...
OpenClaw从入门到应用——工具(Tools):技能配置
通过OpenClaw实现副业收入:《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》 所有与技能相关的配置都位于 ~/.openclaw/openclaw.json 中的 skills 字段下。 {skills: {allowBundled: ["gemini", "peekaboo"],load: {ext…...
STR71X中断服务程序定位与Keil MDK配置详解
1. STR71X中断服务程序定位问题解析在基于ARM7架构的STR71X系列微控制器开发过程中,中断服务程序(ISR)的定位是一个关键但容易被忽视的技术细节。STR71X采用增强型中断控制器(EIC),其硬件设计要求所有中断服务例程必须位于同一个64KB内存段内。这个限制源…...
基于 HarmonyOS 6.0 的智能家政预约页面实战开发:从页面构建到跨端体验优化
基于 HarmonyOS 6.0 的智能家政预约页面实战开发:从页面构建到跨端体验优化 前言 随着 HarmonyOS 生态不断完善,HarmonyOS 6.0 已经不仅仅是一个移动端操作系统,而是逐渐演变为一个真正意义上的全场景分布式操作平台。对于开发者而言…...
双足机器人推进系统建模与系统辨识技术解析
1. 双足机器人推进系统建模与验证概述在机器人动力学控制领域,系统辨识是建立精确数学模型的关键技术。本文以美国东北大学开发的Harpy v2双足机器人为研究对象,重点探讨其集成推进系统的推力与扭矩特性建模方法。这款机器人高约1.2米,重15公…...
高光谱图像处理入门避坑指南:数据冗余、小样本和‘维数灾难’怎么破?
高光谱图像处理实战:破解数据冗余与小样本困境的技术路线 当第一次接触高光谱图像时,大多数研究者都会被其数据立方体的三维结构所震撼——数百个连续光谱波段构成的"超视觉"信息库,理论上能捕捉到人眼无法感知的物质指纹特征。但随…...
AI一键生成微信红包封面系统源码
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 AI微信红包封面生成器源码是一款开源的微信红包封面生成工具,由前腾讯微信后台开发工程师「idoubi」开发并开源。项目名为“AI Cover”,旨在利用人工智能技术为用…...
车道线检测入门:从CULane数据集结构到模型训练(PyTorch实战)
车道线检测实战:从CULane数据集解析到PyTorch模型训练全流程 1. 理解CULane数据集的核心价值 车道线检测作为自动驾驶感知层的关键技术,其性能高度依赖高质量的数据集。CULane凭借其复杂城市道路场景和精细标注,已成为该领域的基准测试集之一…...
智能硬件行业现状与未来趋势:技术、市场与盈利三重门解析
1. 项目概述:为什么现在要聊智能硬件?最近几年,身边的朋友、客户,甚至家里的长辈,都在问我同一个问题:“现在做智能硬件还有机会吗?” 这个问题背后,其实反映了一个普遍的行业焦虑&a…...
