day20-二叉树part07

530.二叉搜索树的最小绝对差 

思路:中序遍历转换成有序数组,遍历数组计算数组相邻元素的差值保存最小,多开辟一个数组空间
class Solution {private List<Integer> list = new ArrayList<>();private void traversal(TreeNode root) {if (root == null) return;traversal(root.left);list.add(root.val); // 将二叉搜索树转换为有序数组traversal(root.right);}public int getMinimumDifference(TreeNode root) {list.clear();traversal(root);if (list.size() < 2) return 0;int result = Integer.MAX_VALUE;for (int i = 1; i < list.size(); i++) { // 统计有序数组的最小差值result = Math.min(result, list.get(i) - list.get(i - 1));}return result;}
}

思路:定义一个最小值变量,一个虚拟前节点  双指针中序遍历二叉树 以此遍历比较大小 遍历过程中记录最小差值
class Solution {int marg = Integer.MAX_VALUE;TreeNode pre = null;public int getMinimumDifference(TreeNode root) {if (root == null) {return 0;}getMinimumDifference(root.left);if (pre != null) {marg = Math.min(marg, root.val - pre.val);}pre = root;getMinimumDifference(root.right);return marg;}
}

540.有序数组的单一元素 

        思路1:使用map计数

class Solution {public int singleNonDuplicate(int[] nums) {Map<Integer,Integer> map = new HashMap<>();for(int num : nums){if(map.containsKey(num)){map.put(num,map.get(num) + 1);}else{map.put(num,1);}}for(int key : map.keySet()){if(map.get(key) == 1){return key;}}return 0;}
}

        思路2:遍历数组异或

class Solution {public int singleNonDuplicate(int[] nums) {int ans = 0;for(int x : nums){ans = ans^x;}return ans;}
}

思路:看到有序数组想到二分法
class Solution {public int singleNonDuplicate(int[] nums) {int left = 0;int right = nums.length - 1;while(right > left){int mid = (right - left) / 2 + left;//mid为偶数 mid^1为mid+1//mid为奇数 mid^1为mid-1if(nums[mid] == nums[mid^1]){left = mid + 1;}else{right = mid;}}return nums[left];}
}

501.二叉搜索树中的众数 

思路1:将二叉搜索树通过中序遍历生成有序数组,通过map哈希进行统计 慢的出奇
class Solution {public int[] findMode(TreeNode root) {List<Integer> res = new ArrayList<>();findMode1(root,res);Map<Integer,Integer> map = new HashMap<>();for(int num : res){if(map.containsKey(num)){map.put(num,map.get(num) + 1);}else{map.put(num,1);}}int maxCount = 0;for(int count : map.values()){maxCount = Math.max(maxCount,count);}List<Integer> modes = new ArrayList<>();for(int num : map.keySet()){if(map.get(num) == maxCount){modes.add(num);}}int[] ressult = new int[modes.size()];for(int i = 0;i < modes.size();i++){ressult[i] = modes.get(i);}return ressult;}private void findMode1(TreeNode root,List<Integer> res){if(root == null){return;}findMode1(root.left,res);res.add(root.val);findMode1(root.right,res);}
}

思路2:双指针,记录每个节点个数以及节点最大个数
class Solution {ArrayList<Integer> resList = new ArrayList<>();int maxValue = 0;int count = 0;TreeNode pre = null;public int[] findMode(TreeNode root) {findMode1(root);int[] res = new int[resList.size()];for(int i = 0;i < resList.size(); i++){res[i] = resList.get(i);}return res;}private void findMode1(TreeNode root){if(root == null){return;}findMode1(root.left);if(pre == null){count = 1;}else if(pre.val == root.val){count++;}else{count = 1;}if(count == maxValue){resList.add(root.val);}if(count > maxValue){maxValue = count;resList.clear();resList.add(root.val);}pre = root;findMode1(root.right);}
}

 236. 二叉树的最近公共祖先 

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//先看根节点是不是祖先if(root == null || root == p || root == q){return root;}//如果根节点是祖先,有没有更近的祖先呢//后序遍历 左右中往上返回TreeNode left = lowestCommonAncestor(root.left,p,q);TreeNode right = lowestCommonAncestor(root.right,p,q);//如果有的话显然只能在一侧 不然就是根节点最近if(left == null){return right;}if(right == null){return left;}//如果没有更近的,默认还是返回rootreturn root;}
}

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

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

相关文章

【Linux】基础IO----系统文件IO 文件描述符fd 重定向

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解在Linux下的系统文件IO&#xff0c;知道什么是文件描述符&#xff0c;什么是重定向 > 毒鸡汤&#xff1a;白日莫闲过&#xff0c;青春不再来。 …

Js 的事件循环(Event Loop)机制

Js 的事件循环(Event Loop)机制 1、js是单线程的&#xff0c;会有阻塞问题 2、浏览器解决阻塞问题的方法&#xff1a;如网络请求、settimeout是用异步来做的&#xff0c;但异步任务没有优先级。为了更灵活&#xff0c;增加了事件循环 3、事件有同步任务和异步任务&#xff0c;先…

ardupilot安装python

目录 文章目录 目录摘要1.安装过程摘要 本节主要记录如何安装ardupilot 的python开发环境,主要参考b站视频B站视频ubuntu 安装python-3.10.0 1.安装过程 sudo apt updatesudo apt install wget build-essential checkinstallwget https://www.python.org/ftp/python/3.10.0…

数据结构(初阶):顺序表实战通讯录

前言 数据结构&#xff08;初阶&#xff09;第一节&#xff1a;数据结构概论-CSDN博客 数据结构&#xff08;初阶&#xff09;第二节&#xff1a;顺序表-CSDN博客 本文将以C语言和顺序表实现通讯录基础管理&#xff0c;实现功能包括增、删、改、查等&#xff0c;在实现相关功能…

学习-Java类和对象之this关键字

&#xff1a;学习-Java类和对象之this关键字 100 任务要求参考答案评论22 任务描述相关知识 this 关键字编程要求测试说明 任务描述 本关任务&#xff1a;编写一个商品结算的小程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;this 关键字的使用。 …

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令&#xff0c;但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写&#xff0c;用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

基于Socket简单的UDP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 1.前言 网络编程前言 网络编程是连接数字世界的桥梁&#xff0c;它让计算机之间能够交流信息&#xff0c;为我们的生活和工作带来便利…

机器学习笔记 - 深度学习遇到超大图像怎么办?使用 xT 对极大图像进行建模论文简读

作为计算机视觉研究人员,在处理大图像时,避免不了受到硬件的限制,毕竟大图像已经不再罕见,手机的相机和绕地球运行的卫星上的相机可以拍摄如此超大的照片,遇到超大图像的时候,我们当前最好的模型和硬件都会达到极限。 所以通常我们在处理大图像时会做出两个次优选择之一:…

gbm模型做分类

导入相关的包 from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from lightgbm import LGBMClassifier from sklearn.preprocessing import PolynomialFeatures获取df中的格式类型 object_columns df.select_dtype…

java给出一个不多于5位的正整数(1)求出它是几位数(2)分别输出每一位数字(3)按逆序输出各位数字

给出一个不多于5位的正整数 &#xff08;1&#xff09;求出它是几位数 &#xff08;2&#xff09;分别输出每一位数字 &#xff08;3&#xff09;按逆序输出各位数字 public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println(&qu…

lottery-攻防世界

题目 flag在这里要用钱买&#xff0c;这是个赌博网站。注册个账号&#xff0c;然后输入七位数字&#xff0c;中奖会得到相应奖励。 githacker获取网站源码 &#xff0c;但是找到了flag文件但是没用。 bp 抓包发现api.php&#xff0c;并且出现我们的输入数字。 根据题目给的附…

推荐一款很强大的SCADA工业组态软件

可以广泛应用于化工、石化、制药、冶金、建材、市政、环保、电力等几十个行业。 I官网网站:www.hcy-soft.com |体验地址:http://www.byzt.net:60/sm/ 一、产品简介 BY组态是完全自主研发的集实时数据展示、动态交互等一体的全功能可视化平台。帮助物联网、工业互联网、电力能…

怎么防止文件被拷贝,复制别人拷贝电脑文件

怎么防止文件被拷贝&#xff0c;复制别人拷贝电,脑文件 防止文件被拷贝通常是为了保护敏感数据、知识产权或商业秘密不被未经授权的人员获取或传播。以下列出了一系列技术手段和策略&#xff0c;可以帮助您有效地防止文件被拷贝。 1. 终端管理软件&#xff1a; 如安企神、域智…

Node.js创建第一个web服务

如果用PHP来编写后端代码&#xff0c;需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时&#xff0c;不仅实现了应用&#xff0c;同时还实现了整个HTTP服务器. 安装 Node Snippets插件&#xff08;编程自带提示&#xff09; console.log(你好nodejs); //表…

MySQL高级篇(B-Tree、Btree)

目录 1、Btree&#xff08;B-Tree&#xff09; 1.1、B-Trees的特点 二叉树缺点&#xff1a;顺序插入时&#xff0c;会形成一个链表&#xff0c;查询性能大大降低。大数据量情况下&#xff0c;层级较深&#xff0c;检索速度慢。红黑树&#xff1a;大数据量情况下&#xff0c;层…

虚拟主机WordPress网站安装教程

一般的企业官网&#xff0c;简站WordPress小编都推荐使用虚拟主机&#xff0c;用虚拟主机搭建一般的WordPress企业官网足够用了。最主要的好处是使用虚拟主机可以省去了主机维护的成本。 下面是以简站WordPress主题在虚拟主机搭建企业官网为例子&#xff0c;写的一个教程&…

多叉树题目:子树中标签相同的结点数

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;子树中标签相同的结点数 出处&#xff1a;1519. 子树中标签相同的结点数 难度 5 级 题目描述 要求 给你一个树&#xff08;即一个连通的无向无环图…

JDK下载及安装说明

1&#xff0e;JDK下载 访问oracle官网&#xff1a;http://www.oracle.com 在首页点击Downloads&#xff0c;进入oracle软件下载页。 在下载页面&#xff0c;点击Java。 选择Java (JDK) for Developers&#xff0c;点击。 在 Java SE Downloads 页面&#xff0c;点击中间的DO…

app上架-您的应用存在最近任务列表隐藏风险活动的行为,不符合华为应用市场审核标准。

上架提示 您的应用存在最近任务列表隐藏风险活动的行为&#xff0c;不符合华为应用市场审核标准。 修改建议&#xff1a;请参考测试结果进行修改。 请参考《审核指南》第2.19相关审核要求&#xff1a;https://developer.huawei.com/consumer/cn/doc/app/50104-02 造成原因 …

反转链表(C语言)

反转链表是一种常见的链表操作&#xff0c;可以通过动态图来说明其过程&#xff1a; 假设有一个包含节点 A -> B -> C -> D -> E 的链表&#xff0c;要将其反转成 E -> D -> C -> B -> A。 初始状态&#xff1a; A -> B -> C -> D -> E创…