代码随想录 二叉树第四周

目录

617.合并二叉树 

700.二叉搜索树中的搜索

98.验证二叉搜索树

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

501.二叉搜索树中的众树

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


617.合并二叉树 

617. 合并二叉树

简单

给你两棵二叉树: 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]

提示:

  • 两棵树中的节点数目在范围 [0, 2000] 内
  • -104 <= Node.val <= 104

递归法:

/*** Definition for a binary tree node.* public class TreeNode {*     int val; // 节点值*     TreeNode left; // 左子节点*     TreeNode right; // 右子节点*     TreeNode() {} // 无参构造函数*     TreeNode(int val) { this.val = val; } // 带值构造函数*     TreeNode(int val, TreeNode left, TreeNode right) { // 带值和子节点的构造函数*         this.val = val;*         this.left = left;*         this.right = 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 (root2 == null && root1 != null) {return root1;}// 创建一个新的节点,值为两个根节点值的和TreeNode node = new TreeNode();node.val = root1.val + root2.val;// 递归合并左子树和右子树node.left = mergeTrees(root1.left, root2.left);node.right = mergeTrees(root1.right, root2.right);return node; // 返回合并后的根节点}
}

迭代法: 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {// 如果第一棵树为空,则返回第二棵树if(root1 == null){return root2;}// 如果第二棵树为空,则返回第一棵树if(root2 == null){return root1;}// 创建一个队列,用于按层遍历二叉树Queue<TreeNode> queue = new LinkedList<>();// 将第一棵树的根节点和第二棵树的根节点加入队列queue.offer(root1);queue.offer(root2);// 循环处理队列中的节点while(!queue.isEmpty()){// 依次从队列中取出两棵树的节点TreeNode node1 = queue.poll();TreeNode node2 = queue.poll();// 合并两棵树的当前节点的值node1.val += node2.val;// 如果两棵树的左子节点均不为空,则将左子节点加入队列if(node1.left != null && node2.left != null){queue.offer(node1.left);queue.offer(node2.left);}// 如果第一棵树的左子节点为空而第二棵树的左子节点不为空,则将第二棵树的左子节点赋给第一棵树if(node1.left == null && node2.left != null){node1.left = node2.left;}// 如果两棵树的右子节点均不为空,则将右子节点加入队列if(node1.right != null && node2.right != null){queue.offer(node1.right);queue.offer(node2.right);}// 如果第一棵树的右子节点为空而第二棵树的右子节点不为空,则将第二棵树的右子节点赋给第一棵树if(node1.right == null && node2.right != null){node1.right = node2.right;}}// 返回第一棵树return root1;}
}

700.二叉搜索树中的搜索

700. 二叉搜索树中的搜索

简单

给定二叉搜索树(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
输出:[]

提示:

  • 树中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 107
  • root 是二叉搜索树
  • 1 <= val <= 107

递归法:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode searchBST(TreeNode root, int val) {// 如果根节点为空或者根节点的值等于目标值,则返回根节点if(root == null || root.val == val){return root;}// 定义一个用于存储搜索结果的节点TreeNode node = new TreeNode();// 如果根节点的值小于目标值,则在右子树中搜索if(root.val < val){node = searchBST(root.right,val);}// 如果根节点的值大于目标值,则在左子树中搜索if(root.val > val){node = searchBST(root.left,val);}// 返回搜索到的节点return node;}
}

迭代法: 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode searchBST(TreeNode root, int val) {// 当根节点不为null时,执行循环while(root != null){// 如果根节点的值大于目标值,则继续在左子树中搜索if(root.val > val){root = root.left;}// 如果根节点的值小于目标值,则继续在右子树中搜索else if(root.val < val){root = root.right;}// 如果根节点的值等于目标值,则返回根节点else{return root;}}// 如果根节点为null,则表示未找到目标值,返回nullreturn root;}
}

98.验证二叉搜索树

98. 验证二叉搜索树

中等

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

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

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1

经过中序遍历的话,二叉搜索树遍历的顺序,val值是从小到大的,设定一个pre节点,判断在中序遍历时,每个节点是否都比前一个节点要大,如果满足条件即为二叉搜索树

这里会有一个经常忽略的地方就是只判断左节点<中节点<右节点,这样就无法判断下图情况

重点在于要明白二叉搜索树的定义 

递归法:(这里的递归法思路更清晰)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {// 用于保存前一个节点的引用TreeNode pre = null;/*** 判断给定的二叉树是否为有效的二叉搜索树* @param root 给定二叉树的根节点* @return 如果是有效的二叉搜索树,则返回true;否则返回false*/public boolean isValidBST(TreeNode root) {// 如果根节点为空,则是有效的二叉搜索树if(root == null){return true;}// 递归判断左子树是否为有效的二叉搜索树boolean leftBoolean = isValidBST(root.left);// 如果前一个节点不为空且前一个节点的值大于等于当前节点的值,则不是有效的二叉搜索树if(pre != null && pre.val >= root.val){return false;}// 更新前一个节点的引用为当前节点pre = root;// 递归判断右子树是否为有效的二叉搜索树boolean rightBoolean = isValidBST(root.right);// 返回左右子树判断结果的逻辑与return leftBoolean && rightBoolean;}
}

迭代法:

import java.util.Queue;
import java.util.LinkedList;class Solution {// 迭代方法验证二叉搜索树public boolean isValidBST(TreeNode root) {if (root == null) {return true; // 空树被视为有效的二叉搜索树}// 使用队列代替栈,模拟中序遍历过程Queue<TreeNode> queue = new LinkedList<>();TreeNode pre = null; // 用于保存前一个节点// 当根节点不为空或队列不为空时,循环执行while (root != null || !queue.isEmpty()) {// 将当前节点的左子树全部入队列while (root != null) {queue.add(root);root = root.left; // 移动到左子节点}// 处理当前节点TreeNode front = queue.remove(); // 出队列if (pre != null && front.val <= pre.val) {return false; // 如果当前节点的值小于等于前一个节点的值,返回 false}pre = front; // 更新前一个节点为当前节点root = front.right; // 处理右子树,移动到右子节点}return true; // 所有节点都遍历完成,返回 true,代表是二叉搜索树}
}

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

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

已解答

简单

相关标签

相关企业

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。

差值是一个正数,其数值等于两值之差的绝对值。

示例 1:

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

示例 2:

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105
class Solution {// 初始化最小差值为整型最大值int minDif = Integer.MAX_VALUE;// 用于保存当前节点的前一个节点TreeNode pre = null;public int getMinimumDifference(TreeNode root) {// 调用辅助方法计算最小差值getMin(root);return minDif;}/*** 辅助方法,递归计算二叉搜索树中任意两节点值的最小差值。* @param node 当前处理的节点。*/public void getMin(TreeNode node){// 若节点为空,则返回if(node == null){return;}// 递归处理左子树getMin(node.left);// 若前一个节点不为空,则计算当前节点值与前一个节点值的差值,并更新最小差值if(pre != null){minDif = Math.min(minDif, node.val - pre.val);}// 更新前一个节点为当前节点pre = node;// 递归处理右子树getMin(node.right);}
}

501.二叉搜索树中的众树

501. 二叉搜索树中的众数

简单

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

示例 1:

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

提示:

  • 树中节点的数目在范围 [1, 104] 内
  • -105 <= Node.val <= 105

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

 暴力解法:使用map集合记录出现次数,排序后取出最大的

class Solution {public int[] findMode(TreeNode root) {// 创建一个映射表,用于存储节点值及其出现的频率Map<Integer, Integer> map = new HashMap<>();// 创建一个列表,用于存储出现频率最高的节点值List<Integer> list = new ArrayList<>();// 如果根节点为空,则返回空数组if (root == null) return new int[0];// 获取树中节点值的频率映射searchBST(root, map);// 将映射表中的条目按值的降序排序List<Map.Entry<Integer, Integer>> mapList = new ArrayList<>(map.entrySet());mapList.sort(new Comparator<Map.Entry<Integer, Integer>>() {@Overridepublic int compare(Map.Entry<Integer, Integer> c1, Map.Entry<Integer, Integer> c2) {return c2.getValue().compareTo(c1.getValue());}});// 将出现频率最高的节点值添加到列表中list.add(mapList.get(0).getKey());// 将与最高频率相同的节点值也添加到列表中for (int i = 1; i < mapList.size(); i++) {if (mapList.get(i).getValue().equals(mapList.get(i - 1).getValue())) {list.add(mapList.get(i).getKey());} else {break;}}// 将列表转换为数组并返回int[] result = new int[list.size()];for (int i = 0; i < list.size(); i++) {result[i] = list.get(i);}return result;}// 辅助方法:遍历二叉搜索树并更新频率映射void searchBST(TreeNode curr, Map<Integer, Integer> map) {if (curr == null) return;// 更新节点值的频率map.put(curr.val, map.getOrDefault(curr.val, 0) + 1);// 递归遍历左子树和右子树searchBST(curr.left, map);searchBST(curr.right, map);}}

使用pre指针和当前指针比较,动态更新count,记录maxCount,更新list中的元素

class Solution {TreeNode pre = null;    // 前一个节点int count = 0;          // 当前节点值的出现次数int maxCount = 0;       // 最大出现次数List<Integer> list = new ArrayList<>(); // 结果列表/*** 查找众数* @param root 二叉树的根节点* @return 众数数组*/public int[] findMode(TreeNode root) {getMode(root);      // 调用获取众数的方法int[] result = new int[list.size()];    // 初始化结果数组for(int i = 0; i < list.size(); i++){   // 将结果列表转换为数组result[i] = list.get(i);}return result;      // 返回结果数组}/*** 获取众数* @param root 当前节点*/public void getMode(TreeNode root){if(root == null){   // 如果当前节点为空,直接返回return;}getMode(root.left);     // 递归处理左子树// 如果前一个节点为空,表示当前节点是第一个节点,出现次数初始化为1// 否则,如果当前节点值和前一个节点值相同,出现次数加1,否则重置为1if(pre == null){count = 1;} else if(pre.val == root.val){count ++;} else {count = 1;}// 如果当前节点出现次数等于最大出现次数,则加入结果列表// 如果当前节点出现次数大于最大出现次数,更新最大出现次数和结果列表if(count == maxCount){list.add(root.val);} else if(count > maxCount){maxCount = count;list.clear();list.add(root.val);}pre = root;     // 更新前一个节点getMode(root.right);    // 递归处理右子树}
}

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

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

已解答

中等

相关标签

相关企业

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。

示例 2:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
输出:5
解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2
输出:1

提示:

  • 树中节点数目在范围 [2, 105] 内。
  • -109 <= Node.val <= 109
  • 所有 Node.val 互不相同 。
  • p != q
  • p 和 q 均存在于给定的二叉树中。

该题分为两种情况

两个节点分别存在于公共祖先两个子树中

一个节点是另外一个节点的祖先 

这里我们先依照第一种的情况来解决问题,思路是采用后序遍历,遇到该两个节点就向上返回,如果节点两子树中都存在返回的节点,表示p,q存在于该节点的两个子树中,该节点为最近公共祖先 

class Solution {/*** 寻找两个节点的最低公共祖先* @param root 根节点* @param p 第一个节点* @param q 第二个节点* @return 最低公共祖先节点*/public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {// 如果根节点为空,返回 nullif(root == null) {return null;}// 递归查找左子树中的最低公共祖先节点TreeNode leftResult = lowestCommonAncestor(root.left,p,q);// 递归查找右子树中的最低公共祖先节点TreeNode rightResult = lowestCommonAncestor(root.right,p,q);// 如果当前节点为 p 或者 q,则当前节点即为最低公共祖先if(root == p || root == q){return root;}// 如果左子树和右子树中均没有找到公共祖先,则返回 nullif(leftResult == null && rightResult == null){return null;}// 如果左子树找到了公共祖先,右子树没有找到,则返回左子树中的公共祖先if(leftResult != null && rightResult == null){return leftResult;}// 如果右子树找到了公共祖先,左子树没有找到,则返回右子树中的公共祖先if(leftResult == null && rightResult != null){return rightResult;}// 如果左右子树均找到了公共祖先,则当前节点为最低公共祖先else {return root;}}
}

再分析第二种情况,如果一节点是另一个节点的祖先,递到祖先节点的时候就会返回,归到根节点返回的是该祖先节点,结果没有错误。

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

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

相关文章

程序员未来发展之路-从入门到高手的成长轨迹

作为程序员&#xff0c;每个人的职业发展路径都是独特而富有挑战性的。从新手到专家&#xff0c;需要不断学习和实践&#xff0c;积累经验和技能。本文将带你探讨程序员职业发展的各个阶段以及关键要素&#xff0c;帮助你规划自己的职业发展之路。 一、新手阶段&#xff1a;夯…

fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换 今天分享的内容是fasta文件与fastq文件的基本知识&#xff0c;以及通过Python实现两者互相转换的方法。 测序数据公司给的格式通常是fq.gz&#xff0c;也就是fastq文件&#xff0c;计算机的角度来说&#xff0c;生物的序列属于一种字符串&#xff0c;就…

2024/3/7—2575. 找出字符串的可整除数组

代码实现&#xff1a; int* divisibilityArray(char *word, int m, int *returnSize) {int n strlen(word);int *res (int*)malloc(sizeof(int) * n);long cur 0;for (int i 0; i < n; i) {cur (cur * 10 (word[i] - 0)) % m;res[i] (cur 0) ? 1 : 0;}*returnSize …

windows重装系统后如何恢复自带的正版office

前言 重装系统后&#xff0c;正版office如何安装 登录微软官网 https://www.microsoft.com 下载office&#xff0c;在已购买的产品中找到Office产品&#xff0c;点击安装,选择默认即可 https://account.microsoft.com/services

基于UDP实现直播间聊天的功能

需求&#xff1a;软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责&#xff1a;1.接收用户的昵称2.接收用户输入的信息&#xff0c;能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责&#xff1a;1.对所有加入直播间的用…

pytorch(四、五)用pytorch实现线性回归和逻辑斯蒂回归(分类)

文章目录 线性回归代码过程准备数据设计模型设计构造函数与优化器训练过程训练代码和结果pytorch中的Linear层的底层原理&#xff08;个人喜欢&#xff0c;不用看&#xff09;普通矩阵乘法实现Linear层实现 回调机制 逻辑斯蒂回归模型损失函数代码和结果 线性回归 代码过程 训…

一键清除JavaScript代码中的注释:使用正则表达式实现

这个正则表达式可以有效地匹配 JavaScript 代码中的各种注释&#xff0c;并且跳过了以 http: 或 https: 开头的链接。 /\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|(?<!http:|https:)\/\/[^\n]*/gvscode 实战&#xff0c;ctrlF 调出查找替换工具&#xff0c;点…

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

设计模式学习笔记(二):工厂方法模式

一、定义 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方法。工厂方法模式定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

Dubbo基础入门二

8、Dubbo协议 服务调用 8.1 服务端 启动过程深入分析 我们查看一下服务启动的过程 ProtocolFilterWrapper.export 好我们进入DubboProtocol.export 创建服务 分析我们的Handler 我们接着返回刚才位置 下面的super方法里面会创建服务&#xff0c;ChannelHandlers.wrap会对hand…

19-Java中介者模式 ( Mediator Pattern )

Java中介者模式 摘要实现范例 中介者模式&#xff08;Mediator Pattern&#xff09;提供了一个中介类&#xff0c;该类通常处理不同类之间的通信&#xff0c;并支持松耦合&#xff0c;使代码易于维护中介者模式是用来降低多个对象和类之间的通信复杂性中介者模式属于行为型模式…

每周一算法:A*(A Star)算法

八数码难题 题目描述 在 3 3 3\times 3 33 的棋盘上&#xff0c;摆有八个棋子&#xff0c;每个棋子上标有 1 1 1 至 8 8 8 的某一数字。棋盘中留有一个空格&#xff0c;空格用 0 0 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是&#xff1a;给出一种初始布局…

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的RT-DETR的项目,经过实验我发现该卷积模块(作为下采样模块)…

nicegui学习使用

https://www.douyin.com/shipin/7283814177230178363 python轻量级高自由度web框架 - NiceGUI (6) - 知乎 python做界面&#xff0c;为什么我会强烈推荐nicegui 秒杀官方实现&#xff0c;python界面库&#xff0c;去掉90%事件代码的nicegui python web GUI框架-NiceGUI 教程…

嵌入式学习第二十五天!(网络的概念、UDP编程)

网络&#xff1a; 可以用来&#xff1a;数据传输、数据共享 1. 网络协议模型&#xff1a; 1. OSI协议模型&#xff1a; 应用层实际收发的数据表示层发送的数据是否加密会话层是否建立会话连接传输层数据传输的方式&#xff08;数据包&#xff0c;流式&#xff09;网络层数据的…

吴恩达深度学习笔记:神经网络的编程基础2.1-2.3

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.1 二分类(Binary Classification)2.2 逻辑回归(Logistic Regression) 第一门课&#xff1a;神经网络和深度学…

基于YOLOv5的无人机视角水稻杂草识别检测

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了无人机视角水稻杂草识别检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点…

Github 2024-03-08 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-08统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9C++项目1非开发语言项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型:OtherStar数量:63556…

网络原理初识(2)

目录 一、协议分层 1、分层的作用 2、OSI七层模型 3、TCP / IP五层&#xff08;或四层&#xff09;模型 4、网络设备所在分层 5、网络分层对应 二、封装和分用 发送过程&#xff08;封装&#xff09; 1、应用层(应用程序) QQ 2、输入层 3、网络层 4、数据链路层 5、物理…