代码随想录算法训练营第十九天|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.hqwc.cn/news/472791.html

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

相关文章

【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

PyTorch 快速安装 - 基于 JupyterHub 并运行 K8s

PyTorch 快速安装 - 基于 JupyterHub 并运行 K8s 运行 PyTorch 可以直接逻辑运行、容器中运行、KubeFlow 中运行以及基于 JupyterHub&#xff08;独立运行或运行在 K8s 之上&#xff09;等多种模式。这里介绍运行在 K8s 上基于 JupyterHub 的 PyTorch 方法&#xff0c;这也是运…

阿里云服务器租用收费标准价格表(2024年更新)

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

阿里云服务器服务费怎么计算的?详细报价解析

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

云计算基础-云计算概念

云计算定义 云计算是一种基于互联网的计算方式&#xff0c;通过这种计算方式&#xff0c;共享的软硬件资源和信息可以按需提供给计算机和其他设备。云计算依赖资源共享以达成规模经济&#xff0c;类似基础设置(如电力网)。 云计算最基本的概念就是云加端&#xff0c;我们有一个…

Hive拉链表设计、实现、总结

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 环境介绍实现1. 初始化拉链表2. 后续拉链表数据的更新 总结彩蛋 - 想清空表的数据&#xff1a;转成内部表&#xff0c;清空数据后&#xff0c;再转成外部表&#xff0c;将分区目录删掉&am…

书生·浦语-模型部署lmpoly

背景 LMDeploy简介 模型量化 模型推理 作业

164基于matlab的奇异值分解、小波降噪、zoom细化

基于matlab的奇异值分解、小波降噪、zoom细化。程序已调通&#xff0c;可直接运行。 164 奇异值分解 小波降噪 zoom细化 (xiaohongshu.com)

无心剑小诗《爱的迷宫》

爱的迷宫 在心海深处悄然铺陈 情感线索纷乱中交织缠绵 一道道的拐角&#xff0c;星云的光辉 指引渴望的心追寻那深邃的真理 曲折通道&#xff0c;每次心跳 爱的重奏在无边探寻里 每一寸肌肤与每一根神经 都铭记你的气息&#xff0c;你的轮廓 迷宫的幻影&#xff0c;无尽的梦…

实现安全性

实现安全性 问题陈述 Chris希望阅读位于服务器上的电子邮件消息。他将自己的登录信息发送到服务器已进行验证。因此,Chris决定用基于表单的验证来验证他的登录信息。但是,他首先决定只用基于表单的验证测试登录页面 。 解决方案 要解决上述问题,Chris需要执行以下任务: 用…

【报告解析】OpenAI Sora视频模型官方报告全解析 | 效果,能力以及基本原理

省流版 1 核心数据处理将视频数据整合成一个一个的Patch&#xff0c;方便统一训练数据&#xff0c;利用扩散Transformer架构 2 功能效果除了可以实现基础的文生视频外&#xff0c;实际上还有非常惊艳的视频延展&#xff0c;视频编辑&#xff0c;视频连接等多种功能&#xff0…

unreal engine5.1中设置convex decomposition凸包分解

UE5系列文章目录 文章目录 UE5系列文章目录前言一、convex decomposition是什么&#xff1f;二、convex decomposition属性设置 前言 今天使用ue5根据网上教程制作可操控直升机&#xff0c;找属性convex decomposition凸包分解&#xff0c;默认的碰撞如下图 如果想使用精细化…