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

654.最大二叉树

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/maximum-binary-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1MG411G7ox/?vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归法):
/*** 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;*     }* }*/
class Solution {//递归法public TreeNode constructMaximumBinaryTree(int[] nums) {return constructMaximumBinaryTree1(nums, 0, nums.length);}public TreeNode constructMaximumBinaryTree1(int[] nums, int indexBegin, int indexEnd){//递归出口处理//左闭右开结构//若没有元素,直接返回nullif(indexBegin >= indexEnd){return null;}//若只有一个元素,直接将当前元素创建新结点并加入二叉树构建中if(indexEnd - indexBegin == 1){return new TreeNode(nums[indexBegin]);}//中处理//记录最大值的索引int maxIndex = indexBegin;//记录最大值int maxValue = nums[maxIndex];//遍历最大值之后的所有列表元素,更新当前序列中的最大值及最大值索引for(int i = indexBegin + 1; i < indexEnd; i++){if(nums[i] > maxValue){maxValue = nums[i];maxIndex = i;}}//为最大值加入新建的二叉树创建新结点TreeNode root = new TreeNode(maxValue);//以maxIndex为界划分左右子树进行递归(注意利用左闭右开挖掉分界结点)//左处理root.left = constructMaximumBinaryTree1(nums, indexBegin, maxIndex);//右处理root.right = constructMaximumBinaryTree1(nums, maxIndex + 1, indexEnd);//返回根结点即可return root;}
}

617.合并二叉树

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/merge-two-binary-trees/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1m14y1Y7JK/?vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归,前序遍历):
/*** 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;*     }* }*/
class Solution {//递归,前序遍历public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//当root1为空,返回root2if(root1 == null){return root2;}//同上if(root2 == null){return root1;}TreeNode merged = new TreeNode(root1.val + root2.val);merged.left = mergeTrees(root1.left, root2.left);merged.right = mergeTrees(root1.right, root2.right);return merged;}
}

700.二叉搜索树中的搜索

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/search-in-a-binary-search-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0700.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%90%9C%E7%B4%A2.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV1wG411g7sF/?spm_id_from=333.788&vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解1(递归法):
/*** 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;*     }* }*/
class Solution {//递归法,利用二叉搜索树特点public TreeNode searchBST(TreeNode root, int val) {if(root == null || root.val == val){return root;}TreeNode result = new TreeNode();//左处理if(val < root.val){result = searchBST(root.left, val);}//右处理if(val > root.val){result = searchBST(root.right, val);}return result;}
}
  • 题解2(迭代法):
/*** 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;*     }* }*/
class Solution {//迭代法public TreeNode searchBST(TreeNode root, int val) {while(root != null){if(val < root.val){root = root.left;}else if(val > root.val){root = root.right;}else{return root;}}return null;}
}

98.验证二叉搜索树

  • 刷题icon-default.png?t=N7T8https://leetcode.cn/problems/validate-binary-search-tree/description/
  • 文章讲解icon-default.png?t=N7T8https://programmercarl.com/0098.%E9%AA%8C%E8%AF%81%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
  • 视频讲解icon-default.png?t=N7T8https://www.bilibili.com/video/BV18P411n7Q4/?spm_id_from=333.788&vd_source=af4853e80f89e28094a5fe1e220d9062
  • 题解(递归法):
/*** 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;*     }* }*/
class Solution {//递归TreeNode max;public boolean isValidBST(TreeNode root) {//二叉搜索树也可以为空if(root == null){return true;}//左递归处理boolean left = isValidBST(root.left);//中处理//用max与root进行双指针比较,max初始为null,初始后第一次被赋值root//此后root与max以双指针形式依次向后比较和遍历//正常二叉搜索树每次都会满足root.val > max.val;//若root.val <= max.val,则说明该二叉树已不是二叉搜索树,返回falseif(max != null && root.val <= max.val){return false;}//当符合要求,root.val > max.val时,双指针继续向后移动max = root;//右处理boolean right = isValidBST(root.right);return right && left;}
}

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

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

相关文章

软件工程师,OpenAI Sora驾到,快来围观

概述 近期&#xff0c;OpenAI在其官方网站上公布了Sora文生视频模型的详细信息&#xff0c;展示了其令人印象深刻的能力&#xff0c;包括根据文本输入快速生成长达一分钟的高清视频。Sora的强大之处在于其能够根据文本描述&#xff0c;生成长达60秒的视频&#xff0c;其中包含&…

1、若依(前后端分离)框架的使用

若依&#xff08;前后端分离&#xff09;框架的使用 0、环境1、下载若依(1) 下载并解压(2) 导入SQL语句(3) 配置Redis、MySQL 2、运行若依3、登录(1) 前端(2) 后端 4、获取用户角色、权限和动态路由(1) 获取用户角色、权限(2) 根据用户信息获取动态路由【getRouters】 5、杂6、…

阿里云服务器ECS租赁费用报价_CPU内存_带宽和系统盘价格表

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

解线性方程组(二)——Jacobi迭代法求解(C++)

迭代法 相比于直接法求解&#xff0c;迭代法使用多次迭代来逐渐逼近解&#xff0c;其精度比不上直接法&#xff0c;但是其速度会比直接法快很多&#xff0c;计算精度可控&#xff0c;特别适用于求解系数矩阵为大型稀疏矩阵的方程组。 Jacobi迭代法 假设有方程组如下&#xf…

QGIS004:【08图层工具箱】-导出到电子表格、提取图层范围

摘要&#xff1a;QGIS图层工具箱常用工具有导出到电子表格、提取图层范围等选项&#xff0c;本文介绍各选项的基本操作。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1ZK4_ShrQ5BsbyWfJ6fVW4A?pwdpiap 提取码&#xff1a;piap 一、导出到电子表格 工具…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北&#xff0c;一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的&#xff0c;背诗的里面最会写段子的&#xff0c;写段子的里面代码写得最好的…厨子。 写在前面 早上醒来&#xff0c;就看到OpenAl推出的视频模型Sora炸锅了&#xff0c;感觉所…

代码随想录 Leetcode452. 用最少数量的箭引爆气球

题目9&#xff1a; 代码&#xff08;首刷看解析 2024年2月17日&#xff09;&#xff1a; class Solution { private:const static bool cmp(vector<int>& a, vector<int>& b) {return a[0] < b[0];} public:int findMinArrowShots(vector<vector<…

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的…

如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

在Qt框架中&#xff0c;要实现一个无标题栏、半透明、置顶&#xff08;悬浮&#xff09;的窗口&#xff0c;需要一些特定的设置和技巧。废话不多说&#xff0c;下面我将以DrawClient软件为例&#xff0c;介绍一下实现这种效果的四个要点。 要点一&#xff1a;移除标题栏&#…

定时器外部时钟

一、相较于内部时钟中断改动&#xff1a; 1.Timer.c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_…

BUGKU-WEB 头等舱

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 先看看源码再看看F12请求和响应 相关工具 略 解题步骤 查看源码&#xff0c;好家伙真的什么也没有 2. 看看F12请求和响应&#xff0c;找到了 得到Flag flag{a49c7aba1014c3673ec9982946d0545a…

fastposter v2.18.0 一分钟完成开发海报-云服务来袭

fastposter v2.18.0 一分钟完成开发海报-云服务来袭 fastposter 是一款快速开发海报的工具&#xff0c;已经服务众多电商、行业海报、分销系统、电商海报、电商主图等海报生成和制作场景。 什么是 fastposter &#x1f525;&#x1f525;&#x1f525;fastposter 是一款海报…

【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

二叉树 一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 性质 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2i−1, i ≥ 1 i \geq 1 i≥1 每层最大结点可以对应完美二叉树&#xff08;…

CSDN如何获得更多勋章?

文章目录 前言一、如何找到自己的勋章&#xff1f;二、如何获得更多勋章&#xff1f;三、重点勋章、易得勋章介绍&推荐1.创作能手2.五一创作勋章3.创作纪念日IT一周年勋章4.新秀勋章5.话题达人6.128天创作纪念日&#xff08;IT博客专属&#xff09;7.GitHub绑定勋章8.其他 …

TIM(Timer)定时中断 P1

难点&#xff1a;定时器级联、主从模式 一、简介&#xff1a; 1.TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 补充&#xff1a; { 定时器本质上是一个计数器&#xff0c;可以工作在定时或计数模式&…

如何简单上手清华AutoGPT并搭建到本地环境

一、准备工作 安装Docker&#xff1a;确保你的本地机器上已经安装了Docker。如果还没有安装&#xff0c;请访问Docker官方网站并按照指引进行安装。--点击进入Docker官网 获取清华AutoGPT的Docker镜像&#xff1a;清华AutoGPT团队可能已经提供了一个Docker镜像&#xff0c;方便…

java8新特性——StreamAPI

说明&#xff1a; java8中有两大最为重要的改变。第一个是Lambda表达式&#xff1b;另外一个则是Stream API。 Stream API&#xff08;java.util.stream&#xff09;把真正的函数式编程风格引入java。这是目前为止对java类库最好的补充&#xff0c;因为Stream API可以极大提供j…

AI:130-基于深度学习的室内导航与定位

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

红蓝对抗:网络安全领域的模拟实战演练

引言&#xff1a; 随着信息技术的快速发展&#xff0c;网络安全问题日益突出。为了应对这一挑战&#xff0c;企业和组织需要不断提升自身的安全防护能力。红蓝对抗作为一种模拟实战演练方法&#xff0c;在网络安全领域得到了广泛应用。本文将介绍红蓝对抗的概念、目的、过程和…

硬盘合并分区失败显示未格式化怎么办?看这里

在当今数字化时代&#xff0c;硬盘分区已成为计算机存储管理的重要手段。然而&#xff0c;在使用过程中&#xff0c;我们有时会遇到“合并分区失败显示未格式化”的问题&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能造成数据丢失的风险。下面将根据不同情况给予不…