代码随想录刷题笔记-Day18

1. 合并二叉树

617. 合并二叉树icon-default.png?t=N7T8https://leetcode.cn/problems/merge-two-binary-trees/

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

示例 1:

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

解题思路

第一想法还是我比较熟悉的递归思路,两棵树的结合的特别之处只是在于一个树有的节点,另一个没有,所以终止条件会有所区别。来考虑下递归的三要素。

  • 参数和返回值:两个树的节点root1和root2;当前递归内已经收到底部返回值后已经集合后的node节点
  • 终止条件:root1和root2都为null
  • 递归逻辑:把root1和root2进行结合,把root1和root2的左节点进行递归作为返回值的左孩子,把root1和root2的右节点进行递归作为返回值的右孩子

代码

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if (root1 == null && root2 == null)return null;int val1 = 0, val2 = 0;TreeNode left1 = null, left2 = null, right1 = null, right2 = null;if (root1 != null) {val1 = root1.val;left1 = root1.left;right1 = root1.right;}if (root2 != null) {val2 = root2.val;left2 = root2.left;right2 = root2.right;}TreeNode root = new TreeNode(val1 + val2);root.left = mergeTrees(left1, left2);root.right = mergeTrees(right1, right2);return root;}
}

2. 二叉搜索树中的搜索

700. 二叉搜索树中的搜索icon-default.png?t=N7T8https://leetcode.cn/problems/search-in-a-binary-search-tree/

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

示例 2:

输入:root = [4,2,7,1,3], val = 5
输出:[]

解题思路

这道题只是考察是否掌握二叉搜索树的定义和搜索,只需要从根节点一路循环下去,找到了就返回,如果循环完都没找到就返回null。

代码

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

3. 验证二叉搜索树

98. 验证二叉搜索树icon-default.png?t=N7T8https://leetcode.cn/problems/validate-binary-search-tree/

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

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

 

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

解题思路

验证二叉搜索树也就是对所有节点进行一个遍历,同时进行一个判断,对每一个节点来说,左右子树是二叉搜索树,并且大于左子树的值小于右子树的值,就满足二叉搜索树的定义。

这个思路是可以进行递归的,所以考虑递归的三要素进行递归实现:

  • 参数和返回值:参数为一个root节点表示当前遍历到的节点,一个bool类型的表示是否为二叉搜索树
  • 终止条件:root为null的时候,说明子树满足条件,返回true
  • 递归逻辑:递归逻辑内比较难的地方在于,左子树的最大值和右子树的最小值用来比较后,如果这个root是父节点的左孩子,又要得到右子树的最大值,如果是右孩子,要得到左子树的最小值。需要一个好的递归逻辑避免这个不一致情况。所以可以拆分成两个步骤,先判断左子树,然后比较max和root的val,比较完后,max就变成了root,然后判断右子树,在判断右子树的过程中,max也在变,由于右子树是最后判断的,所以一定能得到最右下的一个节点,那就是最大值。得到后,回溯的时候就又是max了。

代码

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

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

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

相关文章

PPT导出PDF时保持图像高清的方法

问题: 我们经常会发现&#xff0c;在PPT中插入的图片非常高清&#xff0c;但是通过PPT转换为PDF之后&#xff0c;图片就会出现不同程度的失真。 问题产生的原因: 这是因为Acrobat的PDF Maker在将PPT转换为PDF的时候&#xff0c;对PPT中的图片进行了压缩 Solution: 在PPT的…

BulingBuling - 《21世纪的投资》 [ 21st Century Investing ]

21世纪的投资 - 重新调整金融策略以推动系统变革 21st Century Investing Redirecting Financial Strategies to Drive Systems Change By William Burckart and Steven D. Lydenberg 简介 《21世纪投资》&#xff08;2021&#xff09;是一本关于道德和责任投资策略的指南。…

数字经济政策 | ZF工作报告-60个文本词频

根据各省政府工作报告&#xff0c;参考金灿阳(2022)和陶长琪(2022)&#xff0c;借助Python软件&#xff0c;统计数字经济相关的关键词词频&#xff0c;分别记为数字经济政策词频A、数字经济政策词频B A文献参考 B文献参考 年度趋势 一、数据介绍 数据名称&#xff1a; 政府工…

七、ActiveMQ的传输协议

ActiveMQ的传输协议 一、是什么二、协议1.TCP(默认)2.NIO3.AMQP4.STOMP5.SSL6.MQTT7 WS 三、NIO配置案例1.修改activemq.xml2.重启3.生产者/消费者4.性能提升4.1 配置4.2 生产者/消费者 一、是什么 官网地址&#xff1a;http://activemq.apache.org/configuring-version-5-tra…

一篇文章搞懂MOS管的数据手册

大家好&#xff0c;我是砖一。 MOS管数据手册上的相关参数有很多&#xff0c;以MOS管VBZM7N60为例&#xff0c;下面一起来看一看&#xff0c;MOS管的数据手册一般会包含哪些参数吧。 极限参数也叫绝对最大额定参数&#xff0c;MOS管在使用过程当中&#xff0c;任何情况下都不…

【网站项目】155在线考试与学习交流网页平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

模块、包、库的区别

这三者都是通过import和from…import…语句实现的。 模块&#xff08;module&#xff09; Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 简单来说任何一个以.py的文件都可以视为是一个模块(…

实战 | 使用CNN和OpenCV实现数字识别项目(步骤 + 源码)

导 读 本文主要介绍使用CNN和OpenCV实现数字识别项目,含详细步骤和源码。 前 言 在当今世界,深度学习和图像处理技术正在各个应用领域得到利用。在这篇博文中,我们将使用卷积神经网络 (CNN) 和 OpenCV 库完成数字识别项目。我们将逐步掌握该项目如何执行。 项目准…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十二)(4)

实验十二&#xff1a;微分方程模型 练习四 1.如图12.12所示,有一只猎狗在B点位置发现了一只兔子在正东北方距离它200m的地方0处,此时兔子开始以8m/s的速度向正西北方距离为120m的洞口A全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,按要求完成下面的实验: (1…

【C++航海王:追寻罗杰的编程之路】string类

目录 1 -> 为什么学习string类&#xff1f; 1.1 -> C语言中的字符串 2 -> 标准库中的string类 2.1 -> string类 2.2 -> string类的常用接口 3 -> string类的模拟实现 3.1 -> 经典的string类问题 3.2 -> 浅拷贝 3.3 -> 深拷贝 3.3.1 ->…

TenorFlow多层感知机识别手写体

文章目录 数据准备建立模型建立输入层 x建立隐藏层h1建立隐藏层h2建立输出层 定义训练方式建立训练数据label真实值 placeholder定义loss function选择optimizer 定义评估模型的准确率计算每一项数据是否正确预测将计算预测正确结果&#xff0c;加总平均 开始训练画出误差执行结…

Unity设备分级策略

Unity设备分级策略 前言 之前自己做的设备分级策略&#xff0c;在此做一个简单的记录和思路分享。希望能给大家带来帮助。 分级策略 根据拟定的评分标准&#xff0c;预生成部分已知机型的分级信息&#xff0c;且保存在包内&#xff1b;如果设备没有被评级过&#xff0c;则优…