代码学习记录16

随想录日记part16

t i m e : time: time 2024.03.11



主要内容:今天的主要内容是二叉树的第五部分,主要涉及最大二叉树;合并二叉树;二叉搜索树的搜索;验证二叉搜索树。

  • 654.最大二叉树
  • 617.合并二叉树
  • 700.二叉搜索树中的搜索
  • 98.验证二叉搜索树


Topic1最大二叉树

题目:

给定一个不重复的整数数组 n u m s nums nums 。 最大二叉树可以用下面的算法从 n u m s nums nums 递归地构建:

  • 创建一个根节点,其值为 n u m s nums nums 中的最大值。
  • 递归地在最大值左边的数组前缀上构建左子树。
  • 递归地在最大值右边的子数组后缀上构建右子树.

返回 nums 构建的 最大二叉树 。
示例:
请添加图片描述

输入: n u m s = [ 3 , 2 , 1 , 6 , 0 , 5 ] nums = [3,2,1,6,0,5] nums=[3,2,1,6,0,5]
输出: [ 6 , 3 , 5 , n u l l , 2 , 0 , n u l l , n u l l , 1 ] [6,3,5,null,2,0,null,null,1] [6,3,5,null,2,0,null,null,1]

思路:

最大二叉树的构建过程如下:请添加图片描述
构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。

  • 确定递归函数的参数和返回值
TreeNode constructMaximumBinaryTree(int[] nums)
  • 确定终止条件
   // 1,如果数组大小为0,说明为空节点;if (begin >= end) return null;
  • 确定单层递归的逻辑:1.先要找到数组中最大的值和对应的下标;2,最大值所在的下标左区间 构造左子树;3.最大值所在的下标右区间 构造右子树
   // 2.找出其中最大值对应的索引int index = MaxValueIndex(nums, begin, end);TreeNode tem = new TreeNode(nums[index]);//3.最大值所在的下标左区间 构造左子树tem.left = createMaxTree(nums, begin, index);//4.最大值所在的下标右区间 构造右子树tem.right = createMaxTree(nums, index + 1, end);

总体代码如下:

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return createMaxTree(nums, 0, nums.length);}private TreeNode createMaxTree(int[] nums, int begin, int end) {// 左闭右开// 1,如果数组大小为0,说明为空节点;if (begin >= end)return null;// 2.找出其中最大值对应的索引int index = MaxValueIndex(nums, begin, end);TreeNode tem = new TreeNode(nums[index]);tem.left = createMaxTree(nums, begin, index);tem.right = createMaxTree(nums, index + 1, end);return tem;}private int MaxValueIndex(int[] nums, int begin, int end) {// 查找最大值的对应索引的函数int maxKey = -1;int maxValue = Integer.MIN_VALUE;for (int i = begin; i < end; i++) {if (nums[i] > maxValue) {maxValue = nums[i];maxKey = i;}}return maxKey;}
}


Topic2合并二叉树

题目:

给你两棵二叉树: r o o t 1 root1 root1 r o o t 2 root2 root2
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 n u l l null null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。

请添加图片描述

输入: r o o t 1 = [ 1 , 3 , 2 , 5 ] , r o o t 2 = [ 2 , 1 , 3 , n u l l , 4 , n u l l , 7 ] root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7] root1=[1,3,2,5],root2=[2,1,3,null,4,null,7]
输出: [ 3 , 4 , 5 , 5 , 4 , n u l l , 7 ] [3,4,5,5,4,null,7] [3,4,5,5,4,null,7]

思路:

使用前序遍历的方法构建,其动画如下:
请添加图片描述

  • 确定递归函数的参数和返回值
TreeNode mergeTrees(TreeNode root1, TreeNode root2)
  • 确定终止条件
if (root1 == null && root2 == null)return null;
if (root1 == null && root2 != null)return root2;
if (root1 != null && root2 == null)return root1;
  • 确定单层递归的逻辑:创建一个新的节点来记录。
  TreeNode root = new TreeNode(root1.val + root2.val);root.left = mergeTrees(root1.left, root2.left);root.right = mergeTrees(root1.right, root2.right);

总体代码如下: 递归法:

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if (root1 == null && root2 == null)return null;if (root1 == null && root2 != null)return root2;if (root1 != null && root2 == null)return root1;TreeNode root = new TreeNode(root1.val + root2.val);root.left = mergeTrees(root1.left, root2.left);root.right = mergeTrees(root1.right, root2.right);return root;}
}


Topic3二叉搜索树中的搜索

题目:

给定二叉搜索树( B S T BST BST)的根节点 r o o t root root 和一个整数值 v a l val val。你需要在 B S T BST BST 中找到节点值等于 v a l val val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 n u l l null null
示例:
请添加图片描述

输入: r o o t = [ 4 , 2 , 7 , 1 , 3 ] , v a l = 2 root = [4,2,7,1,3], val = 2 root=[4,2,7,1,3],val=2
输出: [ 2 , 1 , 3 ] [2,1,3] [2,1,3]

思路:

递归法:直接递归就行,不难。

class Solution {public TreeNode searchBST(TreeNode root, int val) {if (root == null)return null;if (root.val == val)return root;else {TreeNode left = searchBST(root.left, val);TreeNode right = searchBST(root.right, val);if (left != null)return left;elsereturn right;}}
}


Topic4验证二叉搜索树

题目:

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:

  • 节点的左子树只包含小 当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。
    示例:
    请添加图片描述

输入: r o o t = [ 5 , 1 , 4 , n u l l , n u l l , 3 , 6 ] root = [5,1,4,null,null,3,6] root=[5,1,4,null,null,3,6]
输出: f a l s e false false
解释: 根节点的值是 5 5 5 ,但是右子节点的值是 4 4 4

思路:

中序遍历是符合二叉搜索树的查找规则的。

  • 确定递归函数的参数和返回值
boolean isValidBST(TreeNode root)
  • 确定终止条件
 if (root == null) return true;
  • 确定单层递归的逻辑:中序遍历,一直更新 $max%,一旦发现 m a x . v a l > = r o o t . v a l max.val>= root.val max.val>=root.val,就返回 f a l s e false false,注意元素相同时候也要返回 f a l s e false false
        // 左boolean left = isValidBST(root.left);if (left != true)return false;// 中if (max != null && max.val >= root.val)return false;max = root;// 右return isValidBST(root.right);

整体的代码如下:

class Solution {TreeNode max;public boolean isValidBST(TreeNode root) {if (root == null)return true;// 中序遍历// 左boolean left = isValidBST(root.left);if (left != true)return false;// 中if (max != null && max.val >= root.val)return false;max = root;// 右return isValidBST(root.right);}
}


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

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

相关文章

sensitive-word 敏感词 违规文字检测

1、快速开始 - JDK1.7- Maven 3.x 2、Maven 引入 <!-- https://mvnrepository.com/artifact/com.github.houbb/sensitive-word --><dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version…

案例分析篇02:软件架构设计考点之特定领域软件架构、架构评估、架构视图(2024年软考高级系统架构设计师冲刺知识点总结)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

VMD + CEEMDAN 二次分解,CNN-LSTM预测模型

目录 往期精彩内容&#xff1a; 前言 1 二次分解与数据集制作 1.1 导入数据 1.2 VMD分解 1.3 样本熵 1.4 CEEMDAN分解 1.5 数据集制作 2 基于Pytorch的 CNN-LSTM 预测模型 2.1 定义CNN-LSTM预测模型 2.2 设置参数&#xff0c;训练模型 3 模型评估与可视化 3.1 结果…

北京市行政村边界shp数据/北京市乡镇边界/北京市土地利用分类数据

北京是一座有着三千多年历史的古都&#xff0c;在不同的朝代有着不同的称谓&#xff0c;大致算起来有二十多个别称。北京地势西北高、东南低。西部、北部和东北部三面环山&#xff0c;东南部是一片缓缓向渤海倾斜的平原。境内流经的主要河流有&#xff1a;永定河、潮白河、北运…

1.4 Word2Vec是如何工作的? Word2Vec与LDA 的区别和联系?

1.4 Word2Vec&#xff1a;词嵌入模型之一 场景描述 谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。 Word2Vec实际是一种浅层的神经网络模型,它有两种网络结构&#xff0c;分别是CBOW(Continues Bag of Words)和Skip-gram。 知识点 Word2Vec,隐狄利克雷模型(LDA),…

ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?

与ChatGPT类似的国内网站&#xff0c;他们都能提供和ChatGPT相似的能力&#xff0c;而且可以在国内直接使用。 点击直达方式 百科GPT官网&#xff1a;baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例&#xff0c;由OpenAI开发。以下是ChatGPT的发展历史&#xff1…

【办公类-40-01】20240311 用Python将MP4转MP3提取音频 (家长会系列一)

作品展示&#xff1a; 背景需求&#xff1a; 马上就要家长会&#xff0c;我负责做会议前的照片滚动PPT&#xff0c;除了大量照片视频&#xff0c;还需要一个时间很长的背景音乐MP3 一、下载“歌曲串烧” 装一个IDM 下载三个“串烧音乐MP4”。 代码展示 家长会背景音乐: 歌曲串…

C语言——简易版扫雷

目录 前言 ​编辑 游戏规则 游戏结构的分析 游戏的设计 使用多文件的好处有以下几点&#xff1a; 游戏代码实现 框架&#xff08;test.c&#xff09; game函数&#xff08;test.c&#xff09; InitBoard初始化&#xff08;game.c&#xff09; Print打印棋盘&#xff08;g…

RNN实战

本主要是利用RNN做多分类任务&#xff0c;在熟悉RNN训练的过程中&#xff0c;我们可以理解 1&#xff09;超参数 batch_size和pad_size对训练过程的影响。 2&#xff09;文本处理过程中是如何将文本的文字表示转化为向量表示 3&#xff09;RNN梯度消失和序列长度的关系 4&#…

Bugku---web---source

1.题目描述 2.点开链接&#xff0c;查看源码&#xff0c;发现了一个长得很像flag的flag&#xff0c;拿去base64解码&#xff0c;发现不是flag 3.没办法只能在kali里面扫描一下目录 4.发现是.git源码泄露&#xff0c;在浏览器尝试访问/.git,发现点开文件并不能看到源码 5.在kali…

06多表查询

多表查询 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个 关联字段可能建立了外键&am…

【Hadoop大数据技术】——HDFS分布式文件系统(学习笔记)

&#x1f4d6; 前言&#xff1a;Hadoop的核心是HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;和MapReduce。其中&#xff0c;HDFS是解决海量大数据文件存储的问题&#xff0c;是目前应用最广泛的分布式文件系统。 目录 &#x…

稀碎从零算法笔记Day15-LeetCode:判断子序列

跑样例的时候LC炸了&#xff0c;以为今天回断更 题型&#xff1a;字符串、双指针 链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;此题建议结合样例理解&#xff09; 给定字符串 s 和 t &#xf…

冰蝎的原理与安装使用

冰蝎的原理与安装使用 1、冰蝎原理 1.1简介 冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端&#xff0c;由于通信流量被加密&#xff0c;传统的WAF、IDS 设备难以检测&#xff0c;给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密&#x…

JVM 面试——G1和ZGC的区别

ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器ZGC的目标主要有4个 支持TB量级的堆。我们生产环境的硬盘还没有上TB呢&#xff0c;这应该可以满足未来十年内&#xff0c;所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor …

【前端寻宝之路】学习和使用CSS的所有选择器

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-blSAMs8NTfBKaPl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

如何选择AI项目:从任务自动化到社会价值的全面考虑

目录 前言1 任务自动化的首要选择1.1 公司痛点分析&#xff1a;深入挖掘潜在问题1.2 数据集的收集与大小考虑&#xff1a;确保数据质量和规模匹配 2 AI项目的商业潜力2.1 技术考察与性能目标&#xff1a;确保技术选择符合项目需求2.2 商业考虑与成本效益分析&#xff1a;全面评…

作用域链的理解(超级详细)

文章目录 一、作用域全局作用域函数作用域块级作用域 二、词法作用域三、作用域链 一、作用域 作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变…

Spring之注入模型

前言 之前我写过一篇关于BeanDefinition的文章,讲述了各个属性的作用,其中有一个属性我没有提到,因为这个属性比较重要,所以这里单独开一篇文章来说明 上一篇博文链接Spring之BeanDefinitionhttps://blog.csdn.net/qq_38257958/article/details/134823169?spm1001.2014.3001…

【Datawhale学习笔记】从大模型到AgentScope

从大模型到AgentScope AgentScope是一款全新的Multi-Agent框架&#xff0c;专为应用开发者打造&#xff0c;旨在提供高易用、高可靠的编程体验&#xff01; 高易用&#xff1a;AgentScope支持纯Python编程&#xff0c;提供多种语法工具实现灵活的应用流程编排&#xff0c;内置…