发布时间:2026/8/26 20:55:59
代码随想录算法训练营第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/8/26 20:55:59

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

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

2026/8/26 20:55:59

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

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

2026/8/26 20:50:58

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

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

2026/8/26 21:51:03

神经外科手术导航建模:临床决策支持系统的核心逻辑

1. 这不是一道“纯数学题”:神经外科手术定位导航的本质是临床决策支持系统2024年认证杯SPSSPRO杯数学建模B题(第一阶段)的标题里,“神经外科手术的定位与导航”这九个字,远比“数学建模B题”五个字沉重得多。它不是在…

2026/8/26 21:51:03

蓝桥杯C/C++省赛实战避坑指南:从建模到VSCode配置

1. 这不是“标准答案集”,而是一份省赛现场复盘手记 十五届蓝桥杯省赛B组(C/C组)刚结束不到72小时,我坐在实验室窗边,咖啡凉了半杯,电脑屏幕上还开着未关闭的IDE和几份刚导出的考生代码片段。这不是一份冷冰…

2026/8/26 21:51:03

无线追踪设备实战:从BLE+GPS到Wi-Fi定位与低功耗设计

1. 项目概述与需求拆解1.1 无线追踪设备到底是什么你可能在快递物流、宠物防丢、车辆管理、资产管理这些场景里见过它,甚至自己就买过一个小标签贴在钥匙串上。Wireless Tracking Device(无线追踪设备)本质上是一个集成了定位模块、无线通信模…

2026/8/26 21:51:03

基于OpenGL的捏脸系统实现:从混合形状到实时渲染

1. 项目概述:从“画脸”到“捏脸”的图形学跨越在三维图形应用里,角色创建系统,或者说“捏脸系统”,一直是个既基础又充满挑战的模块。说它基础,是因为几乎所有涉及角色定制的游戏或应用都绕不开;说它挑战&…

2026/8/26 21:46:02

AI平台化转型:从模型军备竞赛到生态构建的开发者应对策略

1. 从模型到平台:一场正在发生的AI产业范式转移如果你最近关注AI领域,可能会被各种新闻和讨论搞得眼花缭乱:这边OpenAI的GPT-4o刚发布,那边Anthropic的Claude 3.5 Sonnet就宣称在某些基准上实现了超越;这边有巨头宣布A…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…