代码随想录算法训练营第14天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

发布时间:2026/10/27 2:33:49

代码随想录算法训练营第14天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树 654. 最大二叉树看到题目的第一想法看来也是一个构建二叉树的题目只不过这个只需要一个数组其左右数组就是左右子树看完代码随想录的第一想法跟之前构建二叉树差不多这次就是找到最大值然后传入左右子树的开始和结束找左右子树的最大值用自己的话描述首先先定义我用的是左闭右开找到当前数组的最大数和他的下标根据下标找到这个数组左右子树的开始和末尾然后开始左右子树的递归将传回来的节点传入左子节点和右子节点然后返回当前的节点代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */classSolution{publicTreeNodeconstructMaximumBinaryTree(int[]nums){//递归三部曲//1.找到递归参数和返回值//2.找到递归的终止条件//3.找到递归的单层遍历是什么//递归参数是一个数组和数组的开始和结尾返回值为这个根节点//终止条件为数组的开始和结尾相等//单层递归先将该层根节点传入然后将该层的左右子树的开始和结尾算出来然后传入下一个递归将传回来的节点赋于左右子树returnMaxTreeNode(nums,0,nums.length);}publicTreeNodeMaxTreeNode(int[]nums,intnumsStart,intnumsEnd){if(numsStartnumsEnd){returnnull;}intmaxNumnums[numsStart];intindexnumsStart;for(intinumsStart;inumsEnd;i){if(nums[i]maxNum){maxNumnums[i];indexi;}}TreeNoderootnewTreeNode(maxNum);intleftnumsStartnumsStart;intleftnumsEndindex;intrightnumsStartindex1;intrightnumsEndnumsEnd;root.leftMaxTreeNode(nums,leftnumsStart,leftnumsEnd);root.rightMaxTreeNode(nums,rightnumsStart,rightnumsEnd);returnroot;}}实现过程中遇到哪些困难有了上一题的经验这一题没什么困难今日收获记录一下自己的学习时长继续熟练构造二叉树16.30-17.10617. 合并二叉树看到题目的第一想法其实就是根据两个二叉树构建一个新的二叉树看完代码随想录的第一想法就是改变了传入的参数从之前做过的传入数组变成传入两个树两颗树一起递归就是在一个递归中传两个树的参数用自己的话描述先找到该节点两个树的值然后将两个树的值相加组成一个新的树的值然后将两个树进入左子树的递归然后将返回来的节点传入新树的左子节点两个树进入右子树的递归然后将返回来的节点传入新树的右子节点返回这个节点值代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */classSolution{publicTreeNodemergeTrees(TreeNoderoot1,TreeNoderoot2){//递归三部曲//1.找到递归参数和返回值//2.找到递归的终止条件//3.找到递归的单层遍历是什么//1.递归参数为两颗树因为是需要两个树一起递归返回值树节点因为是构造一个树//2.递归终止条件为两个节点同时为null其中一个节点为null就返回另一个节点的值//3.先构建该树节点然后再构建左右子树的节点if(root1nullroot2null){returnnull;}if(root1null)returnroot2;if(root2null)returnroot1;intvalueroot1.valroot2.val;TreeNoderootnewTreeNode(value);root.leftmergeTrees(root1.left,root2.left);root.rightmergeTrees(root1.right,root2.right);returnroot;}}实现过程中遇到哪些困难无今日收获记录一下自己的学习时长继续熟悉递归的使用和构建二叉树21.35-21.54700. 二叉搜索树中的搜索看到题目的第一想法就是找子节点然后返回嘛应该很简单看完代码随想录的第一想法在结合找子节点的基础上加了二叉搜索树的特性进行查找用自己的话描述进入当前节点如果当前节点为null就返回当前节点如果当前节点的值当前搜索值返回当前节点如果都不是就判断搜索值大于当前节点的值还是小于小于将左子节点传入大于将右子节点传入然后返回他们两个其中递归的那一个返回代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */classSolution{publicTreeNodesearchBST(TreeNoderoot,intval){//递归三部曲//1.找到递归参数和返回值//2.找到递归的终止条件//3.找到递归的单层遍历是什么//1.递归参数就是传入当前节点和搜索值返回值就是一个树节点可以代表一个树//2.递归的终止条件要么是找不到节点了递归到当前节点为null返回null要么就是找到子节点了返回子节点//3.就是先判断当前节点是不是null如果是直接返回如果找到值了就返回节点//然后开始对判断当前值是大当前节点还是小于当前节点决定进入左子树还是右子树//返回左子树或右子树的节点if(rootnull||root.valval){returnroot;}TreeNoderesnull;if(root.valval){ressearchBST(root.right,val);}else{ressearchBST(root.left,val);}returnres;}}实现过程中遇到哪些困难无今日收获记录一下自己的学习时长了解了二叉搜索树的定义和其运用21.55-22.2198. 验证二叉搜索树看到题目的第一想法验证二叉搜索树这个题目确实是一点思路都没有看完代码随想录的第一想法一个是先通过递归把二叉搜索树都放到一个数组中然后对进行遍历看看是不是从小到大进行但是还有另一个思路就是一边递归一边比较大小然后如果比较不成功就false用自己的话描述进入节点递归先判断是否为空节点不为空节点就继续进入左子树递归直到找到空节点返回true然后进入最左边的叶子节点判断他的值是不是大于最大值大于就进入右子树递归返回true然后判断该节点是否为二叉搜索树true代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */classSolution{longmaxLong.MIN_VALUE;publicbooleanisValidBST(TreeNoderoot){//递归三部曲//1.找到递归参数和返回值//2.找到递归的终止条件//3.找到递归的单层遍历是什么//1.传一个根节点进去判断这个是不是二叉搜索树所以要返回true或false//2.递归终止条件是当递归到空节点的时候再返回true证明这是二叉搜索树//3.先判断终止条件然后进入左子节点递归然后判断该节点的值是否大于最大值大于就返回继续进入右子节点递归//否则就返回falseif(rootnull){returntrue;}booleanleftisValidBST(root.left);if(root.valmax){returnfalse;}maxroot.val;booleanrightisValidBST(root.right);returnleftright;}}实现过程中遇到哪些困难递归的验证还是有点难想的今日收获记录一下自己的学习时长对于加入一个最大值就能判断这个树的顺序让我更加明白了树的递归顺序22.22-23.10
延伸阅读

更多相关文章

2026/10/27 2:33:03

轻量插件系统设计:30行代码如何实现跨平台统一治理

1. 项目缘起:从“小插件”到“大管家”的困惑 最近在梳理一些开源项目时,一个叫 Agent-Reach 的插件系统引起了我的注意。它的描述非常有意思:一个核心代码量在30到200行之间的插件系统,却声称能够治理14个不同的平台。这听起来…

2026/10/27 2:31:58

头歌实践教学平台:数据科学与大数据技术导论(七下)

七、大数据第2关:大数据概念任务描述 本关任务:根据相关知识内容完成右边选择题。相关知识 为了完成本关任务,你需要掌握: 1.大数据的特征; 2.大数据的影响; 3.大数据的应用; 4.大数据产业&…

2026/10/26 10:10:23

绿色金融:碳中和背景下的金融工具、运作逻辑与实操指南

1. 项目概述:当金融遇见“绿色”最近几年,但凡关注点经济新闻的朋友,肯定对“碳中和”这个词不陌生。它从一个略显专业的环保术语,迅速演变成了全球各国、各大企业战略规划里的核心KPI。简单来说,就是通过植树造林、节…

2026/10/27 2:32:38

GraphRAG与传统RAG技术对比与应用解析

1. GraphRAG与传统RAG的技术对比全景图在知识增强生成领域,GraphRAG和传统RAG代表着两种截然不同的技术路线。传统RAG(Retrieval-Augmented Generation)通过向量相似度检索文档片段来增强大语言模型的生成能力,而GraphRAG则创新性…

2026/10/27 2:32:38

Markmap工具全解析:从原理到企业级应用

1. Markmap-tool-service工具初探:思维导图开发者的瑞士军刀第一次接触Markmap-tool-service是在去年重构技术文档时,当时需要将复杂的系统架构用可视化方式呈现。这个基于Markdown的思维导图工具,通过简单的语法就能生成交互式脑图&#xff…

2026/10/27 2:32:38

计算机博弈竞赛核心:棋类参数、博弈树剪枝与评估函数

简介:《计算机博弈竞赛辅导资料》是一份面向计算机博弈竞赛参赛者及人工智能博弈方向学习者的PPT讲义,侧重帮助读者建立从棋类对象、软件架构到搜索与评估的知识框架。压缩包内含1个PPT文件,大小约2.57MB,内容以课堂讲义形式组织&…

2026/10/27 2:32:38

OpenClaw:结构化数据处理与量化分析开源工具

1. OpenClaw项目概述OpenClaw是一个专注于结构化数据处理、趋势分析和指标量化的开源工具集。这个名字让我联想到小龙虾(crawfish)的双钳——就像它的名字一样,这个工具能够精准抓取、处理和分析各类结构化数据。从GitHub上的项目热度来看&am…

2026/10/27 2:32:38

深入解析计算机内存管理:原理、技术与实践

1. 内存管理的基本概念与重要性内存管理是计算机系统中最为核心的基础功能之一。简单来说,它就是操作系统如何高效、合理地分配和使用计算机内存资源的过程。想象一下内存就像是一个大型仓库,而内存管理就是这个仓库的管理员,负责决定哪些货物…

2026/10/27 2:27:38

2026最新版Maven安装与配置优化全指南

1. 2026最新版Maven安装全流程指南作为Java生态中经久不衰的构建工具,Maven在2026年依然保持着强大的生命力。最近在帮团队统一开发环境时,我发现网上很多教程还停留在老版本,有些配置项已经不再适用。这里分享下经过实际验证的最新安装方案&…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑