二叉树中的深搜

- 🎥 个人主页:Dikz12
- 🔥个人专栏:算法(Java)
- 📕格言:吾愚多不敏,而愿加学
- 欢迎大家👍点赞✍评论⭐收藏
目录
1. 计算布尔二叉树的值
1.1 题目描述
1.2 题解
1.3 代码实现
2. 求根节点到叶子节点数字之和
2.1 题目描述
2.2 题解
2.3 代码实现
3. 二叉树剪枝
3.1 题目描述
3.2 题解
3.3 代码实现
4. 验证二叉搜索树
4.1 题目描述
4.2 题解
4.3 代码实现
5.二叉搜索树中第k个小的元素
5.1 题目描述
5.2 题解
5.3 代码实现
6. 二叉树的所有路径
6.1 题目描述
6.2 题解
6.3 代码实现
1. 计算布尔二叉树的值
1.1 题目描述


1.2 题解
- 返回值:当前节点值;
- 参数:当前节点指针。
- 函数作⽤:求得当前节点通过逻辑运算符得出的值。
- 当前问题规模为 n=1 时,即叶⼦节点,直接返回当前节点值;
- 递归求得左右⼦节点的值;
- 通过判断当前节点的逻辑运算符,计算左右⼦节点值运算得出的结果;
1.3 代码实现
public boolean evaluateTree(TreeNode root) {//出口if(root.left == null) {return root.val == 0 ? false : true;}boolean left = evaluateTree(root.left);boolean right = evaluateTree(root.right);return root.val == 2 ? left | right : left & right;}
2. 求根节点到叶子节点数字之和
2.1 题目描述


2.2 题解
- 将⽗节点的数字与当前节点的信息整合到⼀起,计算出当前节点的数字,然后传递到下⼀层进⾏递 归;
- 当遇到叶⼦节点的时候,就不再向下传递信息,⽽是将整合的结果向上⼀直回溯到根节点。 在递归结束时,根节点需要返回的值也就被更新为了整棵树的数字和。

2.3 代码实现
public int sumNumbers(TreeNode root) {return dfs(root,0);}public int dfs(TreeNode root,int preSum) {preSum = preSum * 10 + root.val;//递归出口if(root.left == null && root.right == null) {return preSum;}int num = 0;if(root.left != null) {num += dfs(root.left,preSum);}if(root.right != null) {num += dfs(root.right,preSum);}return num;}
3. 二叉树剪枝
3.1 题目描述


3.2 题解
- 返回值:⽆;
- 参数 :当前需要处理的节点;
- 函数作⽤:判断当前节点是否需要删除,若需要删除,则删除当前节点。
- 递归出⼝:当传⼊节点为空时,不做任何处理;
- 递归处理左⼦树;
- 递归处理右⼦树;
- 处理当前节点:判断该节点是否为叶⼦节点(即左右⼦节点均被删除,当前节点成为叶⼦节点), 并且节点的值为 0: a. 如果是,就删除掉; b. 如果不是,就不做任何处理。
3.3 代码实现
public TreeNode pruneTree(TreeNode root) {if(root == null) {return null;}root.left = pruneTree(root.left);root.right = pruneTree(root.right);if(root.left == null && root.right == null && root.val == 0) {root = null;}return root;}
4. 验证二叉搜索树
4.1 题目描述

4.2 题解

4.3 代码实现
long prev = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null) {return true;}boolean left = isValidBST(root.left);//剪枝if(left == false) {return false;}//当前节点boolean ret = false;if(prev < root.val) {prev = root.val;ret = true; }boolean right = isValidBST(root.right);return left && ret && right;}
5.二叉搜索树中第k个小的元素
5.1 题目描述

5.2 题解
5.3 代码实现
int count;int ret;public int kthSmallest(TreeNode root, int k) {count = k;dfs(root);return ret;}public void dfs(TreeNode root) {if(root == null) {return;}dfs(root.left);count--;if(count == 0) {ret = root.val;return;}dfs(root.right);}
6. 二叉树的所有路径
6.1 题目描述

6.2 题解
- 如果当前节点不为空,就将当前节点的值加⼊路径 path 中,否则直接返回;
- 判断当前节点是否为叶⼦节点,如果是,则将当前路径加⼊到所有路径的存储数组 ret 中;
- 否则,将当前节点值加上 "->" 作为路径的分隔符,继续递归遍历当前节点的左右⼦节点。
- 返回结果数组。
6.3 代码实现
List<String> ret;public List<String> binaryTreePaths(TreeNode root) {ret = new ArrayList<>();dfs(root, new StringBuffer());return ret;}public void dfs(TreeNode root, StringBuffer _path) {StringBuffer path = new StringBuffer(_path);path.append(Integer.toString(root.val));if (root.left == null && root.right == null) {ret.add(path.toString());return;}path.append("->");if (root.left != null) {dfs(root.left, path);}if (root.right != null)dfs(root.right, path);}
相关文章:
二叉树中的深搜
🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 1. 计算布尔二叉树的值 1.1 题目描述 1.2 题解 1.3 代码实现 2. 求根节…...
固态继电器行业知识详解
固态继电器(SSR)是一种通过电子元件来实现开关功能的器件,与传统的电磁继电器相比,它具有更高的可靠性、耐用性和响应速度,广泛应用于工业自动化、家用电器和各种电子控制系统中。本文将详细探讨固态继电器的工作原理、…...
【practise】数组中出现次数超过一半的数字
关于我: 睡觉待开机:个人主页 个人专栏: 《优选算法》《C语言》《CPP》 生活的理想,就是为了理想的生活! 作者留言 PDF版免费提供:倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。…...
RAGFlow v0.9 重磅升级,支持 GraphRAG,开启下一代 RAG 之旅!
一、引言 前面我们介绍过很多的关于大模型和RAG相关的技术,通过其关注程度足以看到市场上对RAG框架和成熟产品的迫切需求,因为想要个人独立从0开始实现一个RAG产品并非易事,虽然有相当多的RAG或者知识库开源产品,大部分其实很难应…...
MySQL的InnoDB的页里面存了些什么
文章目录 创建新表页的信息新增一条数据根据页号找数据信息脚本代码py_innodb_page_info根据地址计算页号根据页号计算起始地址 主要介绍数据页里面有哪些内容,一行数据在文件里面是怎么组织的 创建新表页的信息 CREATE TABLE test8 (id bigint(20) NOT NULL AUTO…...
SQL Server 事务
1. 什么是事务 SQL Server 事务是数据库操作的一个基本特性,它允许你将一系列数据库操作组合成一个原子单元,这个单元中的所有操作要么全部成功,要么全部失败。事务具有以下四个重要的属性,通常被称为ACID属性。 2、事务的特性 原…...
qt quick实现的水波纹特效:横向波纹、纵向波纹效果
qml实现的水波纹特效 1.横向波纹效果2.另一种效果(纵向波纹) 一直以来使用c qt如果要实现一些高级特效比如水波纹效果都难度比较大,但是使用qt quick难度就会小很多。这里借鉴一些网友的思路简单实现一下水波纹效果。主要思路就是波浪的形成是…...
释放数据要素价值,FISCO BCOS 2024 应用案例征集
2024年,国家数据局等17部门联合印发《“数据要素”三年行动计划(2024—2026年)》,《行动计划》指出,发挥数据要素的放大、叠加、倍增作用,构建以数据为关键要素的数字经济,是推动高质量发展的必…...
日撸Java三百行(day18:循环队列)
目录 一、顺序队列与循环队列 二、代码实现 1.循环队列创建 2.循环队列遍历 3.循环队列入队 4.循环队列出队 5.数据测试 6.完整的程序代码 总结 一、顺序队列与循环队列 在昨天,我们提到队列实现除了采用链式存储结构,还可以采用顺序存储结构&…...
论文精读1
Equivariant Pretrained Transformer for Unified Geometric Learning on Multi-Domain 3D Molecules 核心公式: 论文导图 创新在统一分子建模和块级去噪预训练。...
uniapp免费申请苹果证书教程每次7天可用于测试
准备一个苹果账号没有加入过任何组织的 然后下载appuploader下载链接 登录上去切记勾选上未付苹果688 然后点击苹果证书创建p12证书 创建描述文件 uniapp打包自定义基座 这就打包好了可以愉快地开发了,但每次生成只有7天,设备限制3个,…...
【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
摘要 气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。 本系统基于Python Flask框架&#…...
eBPF编程指南(一):eBPF初体验
1 什么是EBPF? EBPF是一种可以让程序员在内核态执行自己的程序的机制,但是,为了安全起见,无法像内核模块一样随意调用内核的函数,只能调用一些bpf提前定义好的函数。为了让内核执行程序员自己的代码,需要指…...
pip笔记
pip介绍 pip的全称:package installer for python,也就是Python包管理工具。 配置镜像源 镜像列表 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣 http://pypi.douban.com/simple/清华大…...
centos安装postgresql-12
安装pg文件 sudo curl -o /etc/yum.repos.d/pgdg-redhat-all.repo https://mirrors.aliyun.com/postgresql/repos/yum/12/redhat/rhel-7-x86_64/pgdg-redhat-all.repo 清楚缓存重新安装 sudo yum clean all sudo yum makecache 如果报错 删除现有的文件 sudo rm /etc/yum.r…...
Npm使用教程
Npm使用教程 Npm(Node Package Manager)是Node.js的包管理工具和软件包管理系统,广泛用于JavaScript项目的依赖管理和包发布。本文将为你提供一份详细的Npm使用教程,从安装、基本命令、包管理到高级用法,帮助你全面掌…...
【Android Studio】修改项目名称can‘t rename root module解决办法
文章目录 问题现象解决办法 问题现象 修改项目名称 但是直接rename 又会出现 can‘t rename root module 的警告 下图方式只适合修改除项目级别以外的,直接修改项目名称则会报错 解决办法 此时我们只要两步就可以成功修改项目名称了 关闭项目修改其文件夹名称…...
豆瓣Top250电影数据分析可视化系统(Flask+Mysql+Pyecharts)
爬取目标网址:豆瓣Top250 可以看到进入每条电影的详细链接后,显示的内容会更加详细一点 因此我们需要先利用爬虫技术从主页爬取到每条电影的链接,再分别遍历每条电影的链接,获取它的详细内容,这里仅展示一部分代码 利…...
软件质量保证计划书(2024Word完整版)
软件质量保证计划书要点:确立质量目标,组建质保团队,规划全程质控活动,设定质量标准,明确各阶段检查与评审流程,确保各角色职责清晰。强化过程监控,注重数据度量,旨在通过持续改进&a…...
【学习笔记】Matlab和python双语言的学习(动态规划)
文章目录 前言一、动态规划动态规划的基本步骤示例1示例2 三、代码实现----Matlab1.示例12.示例2 四、代码实现----python1.示例12.示例2 总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK411…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...
python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...
