随想录笔记-二叉树练习题
合并二叉树
617. 合并二叉树 - 力扣(LeetCode)
dfs递归
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1==null||root2==null){return root1==null?root2:root1;}return dfs(root1,root2);}public TreeNode dfs(TreeNode root1, TreeNode root2){if(root1==null||root2==null){return root1==null?root2:root1;}root1.val+=root2.val;root1.left=dfs(root1.left,root2.left);root1.right=dfs(root1.right,root2.right);return root1;}
}
类似的思路-对称二叉树
101. 对称二叉树 - 力扣(LeetCode)
class Solution {public boolean isSymmetric(TreeNode root) {if(root==null) return true;return compare(root.left,root.right);
}public boolean compare(TreeNode left,TreeNode right){if(left==null&&right!=null) return false;if(left!=null&&right==null) return false;if(left==null&&right==null) return true;if(left.val!=right.val) return false;boolean inner=compare(left.right,right.left);boolean outside=compare(left.left,right.right);return inner&&outside;}
}
bfs迭代
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1==null||root2==null){return root1==null?root2:root1;}Queue<TreeNode> queue=new LinkedList<TreeNode>();queue.offer(root1);queue.offer(root2);while(!queue.isEmpty()){int len=queue.size();TreeNode t1=queue.poll();TreeNode t2=queue.poll();t1.val+=t2.val;if(t1.left!=null&&t2.left!=null){queue.offer(t1.left);queue.offer(t2.left);}else if(t1.left==null){t1.left=t2.left;}if(t1.right!=null&&t2.right!=null){queue.offer(t1.right);queue.offer(t2.right);}else if(t1.right==null){t1.right=t2.right;}}return root1;}
}
二叉搜索数中的搜索
利用二叉树的性质
首先我们需要知道 二叉搜索树 的一个关键性质:
二叉搜索树任意节点的左子树上所有节点值都小于这个节点;
二叉搜索树任意节点的右子树上所有节点值都大于这个节点;
700. 二叉搜索树中的搜索 - 力扣(LeetCode)
class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root==null||root.val==val) return root;if(root.val>val) return searchBST(root.left,val);return searchBST(root.right,val);}
}
验证二叉搜索数
98. 验证二叉搜索树 - 力扣(LeetCode)
中序遍历
二叉搜索树的性质出发,中序遍历的情况下,后一个数比前一个数大
所以这里面的pre处理的非常好
98. 验证二叉搜索树 - 力扣(LeetCode)
*/
class Solution {long pre=Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root==null) return true;if(!isValidBST(root.left))return false;if(root.val<=pre)return false;pre=root.val;return isValidBST(root.right);}
}
前序遍历
这个代码我自己写的,但是我写的时候没有把边界作为参数传递进去,所以就无法判断子树与根节点的情况,只能判断以以子节点为根节点的数的情况
class Solution {public boolean isValidBST(TreeNode root) {if(root==null) return true;return deal(root,Long.MAX_VALUE,Long.MIN_VALUE);}public boolean deal(TreeNode root,long max,long min){if(root==null) return true;if(root.val<=min||root.val>=max) return false;return deal(root.left,root.val,min)&&deal(root.right,max,root.val);}
}
二叉搜索树的最小绝对差
min(root.left);
if(pre!=Integer.MIN_VALUE){
min=Math.min(min,Math.abs(root.val-pre));
}
pre=root.val;
min(root.right);
pre=root.val;回到根节点
要知道二叉搜索树和中序遍历是好朋友!
class Solution {int min=Integer.MAX_VALUE;int pre=Integer.MIN_VALUE;public int getMinimumDifference(TreeNode root) {min(root);return min;}public void min(TreeNode root){if(root==null) return ;min(root.left);if(pre!=Integer.MIN_VALUE){min=Math.min(min,Math.abs(root.val-pre));}pre=root.val;min(root.right);}
}
二叉搜索树中的众数
501. 二叉搜索树中的众数 - 力扣(LeetCode)
根据二叉搜索树的特点 ,对其进行中序遍历,得到一个有序数组,然后寻找重复的元素
注意!!这个的众数是出现频率最高的数,不是重复的数就是众数
class Solution {HashMap<Integer,Integer> map=new HashMap<>();public int[] findMode(TreeNode root) {List<Integer> list=new ArrayList<>();inorder(root,list);int pre=list.get(0);int len=1;int maxlen=1;List<Integer> res=new ArrayList<>();res.add(list.get(0));for(int i=1;i<list.size();i++){if(list.get(i)==pre){len=len+1;}else{len=1;}if(len==maxlen){res.add(list.get(i));}else if(len>maxlen){maxlen=len;res.clear();res.add(list.get(i));}pre=list.get(i);}return res.stream().mapToInt(Integer::intValue).toArray();}public void inorder(TreeNode root,List<Integer> list){if(root==null)return ;inorder(root.left,list);list.add(root.val);inorder(root.right,list);}}
这个代码就是前一个代码的优化,在中序操作的时候把重复元素找出来,所以执行时间更快
501. 二叉搜索树中的众数 - 力扣(LeetCode)
class Solution {int maxCount = 1;int count = 1;TreeNode preNode = null; // 存储前一个结点List<Integer> list = new ArrayList(); // 结果集public int[] findMode(TreeNode root) {// 中序遍历中,相同的元素都是一起出现的inOrder(root);int res[] = new int[list.size()];for(int i=0;i<list.size();i++) {res[i] = list.get(i);}return res;}public void inOrder(TreeNode root) {if(root == null) return ;inOrder(root.left);// 中序遍历的处理逻辑if(preNode!=null) { // 非第一个元素的处理逻辑// 判断当前元素与前一个元素的关系,如果相同count++,不相同重新开始计数if(root.val==preNode.val) count++;else count=1;// 判断当前计数器与最大数的关系,如果相等就加入list,大于就清空list并加入if(count>maxCount) {maxCount = count;list.clear();list.add(root.val);} else if(count==maxCount)
二叉树的最近公共祖先
相关文章:
随想录笔记-二叉树练习题
合并二叉树 617. 合并二叉树 - 力扣(LeetCode) dfs递归 class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1null||root2null){return root1null?root2:root1;}return dfs(root1,root2);}public TreeNode dfs(Tre…...
华雁智科前端面试题
1. var 变量的提升 题目: var a 1 function fun() {console.log(b)var b 2 } fun() console.log(a) 正确输出结果:undefined、1答错了,给一个大嘴巴子,错误答案输出结果为:2,1 此题主要考察 var 定义的变量&…...

【iOS】单例模式
【iOS】单例模式 什么是单例模式? 定义 单例模式,简单地说就是一个类只对应一个对象,每次使用这个类时,都只能获取到那一个对象。它的详细定义如下: 如果一个类始终只能创建一个实例,则这个类被称为单例…...

Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉
信号是 Linux 操作系统中非常重要的进程控制机制,用来异步通知进程发生某种事件。理解信号的产生、阻塞、递达、捕捉等概念,可以帮助开发者更好地编写健壮的应用程序,避免由于未处理的信号导致程序异常退出。本文将带你从基础概念开始&#x…...
递归的时间复杂度分析
确定回溯算法的时间复杂度通常比较复杂,因为它取决于搜索空间的大小以及你的剪枝效率。对于生成从1到n的所有长度为k的组合。分析这类算法的时间复杂度时,我们通常需要考虑递归树的所有可能路径。 组合数 生成的组合数量是从n个元素中选择k个的组合数&…...

C++: 二叉树进阶面试题
做每件事之前都心存诚意, 就会事半功倍. 目录 前言1. 根据二叉树创建字符串2. 二叉树的层序遍历Ⅰ3. 二叉树的层序遍历Ⅱ4. 二叉树的最近公共祖先5. 二叉搜索树与双向链表6. 根据一棵树的前序遍历与中序遍历构造二叉树7. 根据一棵树的中序遍历与后序遍历构造二叉树8. 二叉树的…...

【HarmonyOS NEXT】实现网络图片保存到手机相册
【问题描述】 给定一个网络图片的地址,实现将图片保存到手机相册 【API】 phAccessHelper.showAssetsCreationDialog【官方文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-photoaccesshelper-V5#showassetscreationdialog…...

Pytorch详解-数据模块
Pytorch详解-数据模块 torch.utils.data.Dataset数据交互模块—Dataset的功能示例系列APIsconcatSubsetrandom_splitsampler unsqueeze DataLoaderDataLoader功能支持两种形式数据集读取自定义采样策略自动组装成批数据多进程数据加载自动实现锁页内存(Pinning Memo…...
浅谈openresty
熟悉了nginx后再来看openresty,不得不说openresty是比较优秀的。 对nginx和openresty的历史等在这此就不介绍了。 首先对标nginx,自然有优劣 一、开发难度 nginx: 毫无疑问nginx的开发难度比较高,需要扎实的c/c基础ÿ…...
【学习笔记】2024最新版SpringCloud教程
2024最新版SpringCloud教程 0 前言闲聊开篇简介 1 SpringBoot和SpringCloud版本选型 2 SpringCloud是什么能干吗 3 SpringCloud各组件的停更升级替换说明 4 项目实战之需求说明 5 项目实战之Maven父工程聚合说明和mysql驱动选择 6 项目实战之Mapper4一键生成Dao层代码 …...

Proxyless Service Mesh:下一代微服务架构体系
一、项目背景及意义 在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如: 服务间通信的复杂性&#…...

大数据Flink(一百一十八):SQL水印操作(Watermark)
文章目录 SQL水印操作(Watermark) 一、为什么要有WaterMark 二、Watermark解决的问题 三、代码演示 SQL水印操作(Watermark) 一、为什么要…...

【QGC】把QGroundControl地面站添加到Ubuntu侧边菜单栏启动
把QGroundControl地面站添加到Ubuntu侧边菜单栏启动 简介准备工作步骤 1: 创建 Desktop Entry 文件步骤 2: 编辑 Desktop Entry 文件步骤 3: 刷新应用程序菜单步骤 4: 将 QGroundControl 固定到侧边栏 环境: Ubuntu :20.04 LTS 简介 QGroundControl 是…...
PostgreSQL配置主从同步
PostgreSQL配置主从同步 1 主、备库安装postgresql软件 su - pg12 cd /home/pg12/resource tar -zxvf postgresql-12.9.tar.gz cd postgresql-12.9/ ./configure --prefix/home/pg12/soft/ make -j 16 && make install2 主、备库配置环境变量 vi ~/.bash_profile…...

基于python+django+vue的鲜花商城系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…...

李飞飞任CEO,空间智能公司World Labs亮相,全明星阵容曝光
人工智能的下个大方向已经出现,标志性学者决定下场创业。 本周五,一个重磅消息引爆了 AI 圈:斯坦福大学计算机科学家李飞飞正式宣布创办 AI 初创公司 ——World Labs,旨在向人工智能系统传授有关物理现实的深入知识。 李飞飞说道&…...
PyTorch详解-可视化模块
PyTorch详解-可视化模块 Tensorboard 基础与使用启动 TensorBoard访问 TensorBoard使用 TensorBoardSummaryWriter类介绍参数说明常用方法 CNN卷积核与特征图可视化参数说明返回值 混淆矩阵与训练曲线可视化混淆矩阵可视化训练曲线绘制 模型参数打印参数说明输出解释 Tensorboa…...

Bootstrap 警告信息(Alerts)使用介绍
本章将讲解警告(Alerts)以及 Bootstrap 所提供的用于警告的 class。警告(Alerts)向用户提供了一种定义消息样式的方式。它们为典型的用户操作提供了上下文信息反馈。 您可以为警告框添加一个可选的关闭按钮。为了创建一个内联的可…...

uniapp(H5)设置反向代理,设置成功后页面报错
设置反向代理后,页面报错图: 反向代理代码:devServer下面就是配置对应的代理,一般这样就没问题了 "h5": {"router": {"mode": "hash"},"devServer": {"port": 517…...
define、typedef和using的使用
define、typedef 和 using 是 C(以及 C 语言中的 define)中用于定义别名或简化复杂类型的三个关键字,但它们各自有着不同的用途和行为。下面将分别对比这三个关键字: 1. #define 定义方式:#define 是预处理指令&…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...