day19-二叉树part06

654.最大二叉树 
class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return constructMaximumBinaryTree1(nums,0,nums.length);}public TreeNode constructMaximumBinaryTree1(int[] nums,int leftIndex,int rightIndex){if(rightIndex - leftIndex < 1){ //区间没有元素return null;}//区间只有一个元素 直接为叶子节点或者根节点if(rightIndex - leftIndex == 1){return new TreeNode(nums[leftIndex]);}//找到nums数组中最大值以及下标  根节点int index = leftIndex;int maxValue = nums[index];for(int i = leftIndex+1;i < rightIndex ;i++){if(nums[i] > maxValue){maxValue = nums[i];index = i;}}TreeNode root = new TreeNode(maxValue);//根据maxIndex划分左右子树root.left = constructMaximumBinaryTree1(nums,leftIndex,index);root.right = constructMaximumBinaryTree1(nums,index+1,rightIndex);return root;}
}

 617.合并二叉树 

递归

       

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

 

        队列迭代 只操作root1树 所以无需考虑root2树中节点为空root1不为空的情况 如果为空 直接使用root1值

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if(root1 == null) return root2;if(root2 == null) return root1;Queue<TreeNode> que = new LinkedList<>();que.add(root1);que.add(root2);while(!que.isEmpty()){TreeNode node1 = que.poll();TreeNode node2 = que.poll();node1.val = node1.val + node2.val;//如果两树左节点都不为空if(node1.left != null && node2.left != null){que.add(node1.left);que.add(node2.left);}//如果两树右节点都不为空if(node1.right != null && node2.right != null){que.add(node1.right);que.add(node2.right);}if(node1.left == null && node2.left != null){node1.left = node2.left;}if(node1.right == null && node2.right != null){node1.right = node2.right;}}return root1;}
}

 700.二叉搜索树中的搜索 

       

二叉搜索树是一个有序树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树

这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。在搜索值时无需想普通二叉树前中后序全部遍历,以及无需回溯

递归代码 利用二叉树搜索特点

class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root == null || root.val == val){return root;}TreeNode resNode = null;if(root.val > val){resNode = searchBST(root.left,val);}if(root.val < val){resNode = searchBST(root.right,val);}return resNode;}
}

递归代码:普通二叉树

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

迭代代码

普通迭代:

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

栈迭代

class Solution {// 迭代,普通二叉树public TreeNode searchBST(TreeNode root, int val) {if (root == null || root.val == val) {return root;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()) {TreeNode pop = stack.pop();if (pop.val == val) {return pop;}if (pop.right != null) {stack.push(pop.right);}if (pop.left != null) {stack.push(pop.left);}}return null;}
}

队列迭代+搜索二叉树特性

class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root == null){return root;}Queue<TreeNode> que = new LinkedList<>();TreeNode res = null;que.add(root);while(!que.isEmpty()){int size = que.size();for(int i = 0;i < size; i++){TreeNode node = que.poll();if(node.val > val && node.left != null){que.add(node.left);}else if(node.val < val && node.right != null){que.add(node.right);}else if(node.val == val){res = node;}}}return res;}
}

 98.验证二叉搜索树 

    思路一:将二叉树中序遍历完保存一个数组 如果这个数组是从小到大 那么这就是一个搜索二叉树,缺点:增加了空间消耗多创建一个数组来存储节点元素

class Solution {public boolean isValidBST(TreeNode root) {List<Integer> arry = new ArrayList<>();inorder(root,arry);for(int i = 1; i < arry.size();i++){//遍历前一位与后一位进行比较 防止数组越界if(arry.get(i) <= arry.get(i-1)){return false;}}return true;}private void inorder(TreeNode root,List<Integer> arry){if(root == null){return;}inorder(root.left,arry);arry.add(root.val);inorder(root.right,arry);}
}

        思路二:在遍历中就进行大小比较,初始一个节点前面的值 相当于中序遍历 前一个节点与后一个节点连续比较,缺点:如果数据精度跟小就要变化

class Solution {//后台测试数据中有int最小值 只有比int最小值更小才能更新pre的值private long pre = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if(root == null){return true;}//左boolean left = isValidBST(root.left);if(!left){return false;}//中序遍历,验证遍历的元素是不是从小到大if(pre < root.val){pre = root.val;}else{return false;}boolean right = isValidBST(root.right);return left && right;}
}

        思路三:双指针 前一个节点与后一个节点进行比较

class Solution {//用来记录一个前节点TreeNode pre = null;public boolean isValidBST(TreeNode root) {if(root == null){return true;}boolean left = isValidBST(root.left);if(pre != null && pre.val >= root.val){return false;}pre = root;boolean right = isValidBST(root.right);return left && right;}
}

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

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

相关文章

0205矩阵分块法-矩阵及其运算-线性代数

文章目录 1 分块矩阵的定义2 分块矩阵的运算&#xff08;性质&#xff09;3 按列分块与按行分块 结语 1 分块矩阵的定义 将矩阵A用若干条纵线和横线分成许多个小矩阵&#xff0c;每一个小矩阵称为A的子快&#xff0c;以子块为元素的形式上的矩阵称为分块矩阵。 2 分块矩阵的运算…

Java中的并发和并行的区别

在Java中&#xff0c;并发&#xff08;Concurrency&#xff09;和并行&#xff08;Parallelism&#xff09;是两个常被提及但容易混淆的概念。下面我将详细解释这两个概念的区别&#xff0c;并给出相应的例子。 并发&#xff08;Concurrency&#xff09; 并发指的是在同一时间…

关于Mac使用idea问题

多窗口切换问题 如果出现Mac打开idea新的项目&#xff0c;发现始终就一个窗口&#xff0c;不能像window那样多窗口&#xff0c;比如 只能这样来回点着切换&#xff0c;提供以下方案 1.方案一 则在idea里多个项目会呈tab页切换&#xff0c;也是始终一个窗口&#xff0c;只是多了…

建模实例评点(3)领域类图-作战推演

1 00:00:00,310 --> 00:00:03,990 你看&#xff0c;我们会有很多很多泛化 2 00:00:04,360 --> 00:00:05,810 这里有很多很多泛化 3 00:00:06,350 --> 00:00:07,420 这种情况下 4 00:00:08,020 --> 00:00:09,850 包括这种&#xff0c;没准也可以 5 00:00:10,380…

基于canal实现MySQL作为主库的ES与MySQL数据同步

1.对mysql的配置 需要一个mysql作为主库&#xff0c;它需要开启binlog,开启binlog需要修改配置文件my.cnf mysql安装就不多说了&#xff0c;我的mysql是5.7 &#xff0c;装在docker中 我的mysql配置文件在容器中/etc/my.cnf 开启binlog需要修改my.cnf 即添加 log-binmysql…

「38」LUT在直播间调色的高级应用……

「38」LUT滤镜 对人或物进行精进调色 OBS软件中的LUT&#xff08;Look Up Table&#xff09;滤镜&#xff0c;可用于调整视频、图像的色彩和对比度等效果&#xff0c;以实现专业级的颜色调整需求。 左图为原图 右图为LUT 先对比上面的两张图&#xff0c;用了滤镜效果的变化…

内容创作策略:打造影响力强大的技术博客

CSDN的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第6篇文章——“博客内容创作策略”。本文为技术博主提供了一个精简的内容创作策略指南&#xff0c;涵盖了设定目标、分析竞争、关键词研究、内容规划…

Embedding:跨越离散与连续边界——离散数据的连续向量表示及其在深度学习与自然语言处理中的关键角色

Embedding嵌入技术是一种在深度学习、自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域广泛应用的技术&#xff0c;它主要用于将高维、复杂且离散的原始数据&#xff08;如文本中的词汇、图像中的像素等&#xff09;映射到一个低维、连续且稠密的向量空间中。这些低…

pdf、docx、markdown、txt提取文档内容,可以应用于rag文档解析

返回的是文档解析分段内容组成的列表&#xff0c;分段内容默认chunk_size: int 250, chunk_overlap: int 50&#xff0c;250字分段&#xff0c;50分段处保留后面一段的前50字拼接即窗口包含下下一段前面50个字划分 from typing import Union, Listimport jieba import recla…

ES学习笔记01

1.ES安装 下载地址&#xff1a; es官网下载 这里使用的是7.8.0的版本信息 下载完成后解压即可完成安装 2.启动运行 点击bin目录下的elasticsearch.bat文件即可启动 在浏览器中输入localhost:9200显示如下&#xff1a; 在路径中加入对应访问后缀即可访问对应信息 如&#…

四大引用类型——强引用、软引用、弱引用、虚引用

强引用 垃圾回收器绝对不会回收它&#xff0c;即使内存不足也会报错OOM也不会回收它。 软引用 只有当内存不足时垃圾回收器才会回收它。 弱引用 当垃圾回收期扫描到弱引用&#xff0c;不管内存空间不足与否&#xff0c;只要一旦发现就会回收。 虚引用 相当于没有引用。虚…

微自传系列---AppleSteve Jobs

1 三个苹果的故事 在求学的过程中&#xff0c;笔者听到过关于 “三个苹果” 的故事。三个苹果&#xff0c;分别指的是亚当和夏娃的苹果、牛顿的苹果以及乔布斯的苹果&#xff0c;这三个苹果在各自的故事中都有着深远的寓意和影响。 这三个苹果&#xff0c;分别代表了人类历史的…

中药提取物备案数据库<5000+中药提取物>

NMPA中药提取物备案数据库的建立是确保中药提取物质量安全、规范生产行为、加强监管、保障公众用药安全、促进产业发展和国际化的重要措施。 通过查询中药提取物备案信息我们能了解到中药提取物的实用备案号、药品通用名称、药品生产企业、批准文号、备案日期、备案状态、中药…

Mybatis学习笔记:多表关联,懒加载,缓存

人生呐…… 文章目录 一、多表关联查询1.1 定制类1.2 成员属性&#xff08;利用association标签和collection标签 二、懒加载2.1 配置2.2 实现 三、缓存3.1 一级缓存&#xff08;session中的缓存3.2 二级缓存&#xff08;Mapper中的缓存 一、多表关联查询 确定主表确定关联表确…

算法设计与分析(实验5)-----图论—桥问题

一&#xff0e;实验目的 掌握图的连通性。掌握并查集的基本原理和应用。 二&#xff0e;实验步骤与结果 1.定义 &#xff08;1&#xff09;图的相关定义 图&#xff1a;由顶点的有穷非空集合和顶点之间的边的集合组成。 连通图&#xff1a;在无向图G中&#xff0c;若对于…

Springboot 集成Rabbitmq之延时队列

1.首先确保已经引入了Spring AMQP和RabbitMQ的相关依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2. 创建一个普通队列并设置TTL&#x…

TPCH工具下载及用法

目录 1. 什么是TPCH&#xff1f; 2. 下载TPCH基准工具 3. 编译TPCH基准工具 3.1. 修改头文件 3.2. 修改编译文件 3.3. 执行编译 4. qgen 的用法 4.1. 异常处理 4.2 常见用法 5. dbgen 的用法 5.1. 语法说明 5.2. 常见用法 6. 总结 1. 什么是TPCH&#xff1f; TPC-…

【rabbitmq】rabbitmq与erlang的版本对应关系

rabbitmq与erlang的版本对应关系 https://www.rabbitmq.com/docs/which-erlang

蓝桥杯练习系统(算法训练)ALGO-957 P0703反置数

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 一个整数的反置数指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整数。如果一个整数的末尾是以0结尾&#xff0c;那么在它的…