leetcode刷题——二叉树(1)
目录
1、递归遍历二叉树
2、迭代法遍历二叉树(通过while循环)
3、二叉树的层序遍历
4、二叉树的层次遍历 II
5、二叉树的右视图
6、二叉树的层平均值
7、N叉树的层序遍历
8、在每个树行中找最大值
9、填充每个节点的下一个右侧节点指针
10、填充每个节点的下一个右侧节点指针II
11、二叉树的最大深度
12、二叉树的最小深度
二叉树有两种主要的形式:满二叉树和完全二叉树、二叉搜索树、二叉平衡树
遍历方式
- 深度优先遍历
- 前序遍历(递归法,迭代法)中左右
- 中序遍历(递归法,迭代法)左中右
- 后序遍历(递归法,迭代法)左右中
- 前中右代表中间节点的位置
- 广度优先遍历
- 层次遍历(迭代法)
1、递归遍历二叉树
-
确定递归函数的参数和返回值
-
确定终止条件
-
确定单层递归的逻辑
class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(){};TreeNode(int val){this.val=val;}
}
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();preOrder(root,res);return res;}//前序遍历:中左右public void preOrder(TreeNode cur,List<Integer> res){if(cur==null){return;}res.add(cur.val);preOrder(cur.left,res);preOrder(cur.right,res);}//后序遍历:左右中public void postOrder(TreeNode cur,List<Integer> res){if(cur==null){return;}postOrder(cur.left,res);postOrder(cur.right,res); res.add(cur.val);}//中序遍历:左中右public void inOrder(TreeNode cur,List<Integer> res){if(cur==null){return;}inOrder(cur.left,res);res.add(cur.val);inOrder(cur.right,res); }
}
2、迭代法遍历二叉树(通过while循环)
class Solution {//前序迭代:先把中间节点入栈,然后弹出再把右边的节点入栈,再把左节点入栈,才能保证弹出的顺序是中左右public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res=new ArrayList<>();Stack<TreeNode> ss=new Stack();// stack方法 peek pop push empty 继承vectorif (root==null) return res;TreeNode cur=root;ss.push(cur);while(!ss.empty()){TreeNode node=ss.pop();res.add(node.val);if(node.right!=null) ss.push(node.right);if(node.left!=null) ss.push(node.left);}return res;}public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res=new ArrayList<>();Stack<TreeNode> ss=new Stack<>();if(root==null) return res;TreeNode cur=root;//中序遍历,左中右 while(!ss.empty() || cur!=null){//不断的把左节点入栈if(cur!=null) {ss.push(cur);cur=cur.left;}//左节点为空,那就弹出当前的中间节点,然后把指针挪到右边节点else{cur=ss.pop();res.add(cur.val);cur=cur.right;}}return res;}public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res=new ArrayList<>();Stack<TreeNode> ss=new Stack<>();if(root==null) return res;TreeNode cur=root;ss.push(cur);while(cur!=null || !ss.empty()){//左右中的顺序//先遍历完左边的节点,同时要切断树之间的联系,免得下次重复添加节点if(cur.left!=null){ss.push(cur.left);cur.left=null;cur=ss.peek();continue;}//遍历完右边的节点,同时要切断树之间的联系,免得下次重复添加节点if(cur.right!=null){ss.push(cur.right);cur.right=null;cur=ss.peek();}左右遍历结束后,就弹出中间节点,然后回到栈顶的下一个节点else{cur=ss.pop();res.add(cur.val);System.out.print(cur.val);if(!ss.empty()) cur=ss.peek();else{cur=null;}}}return res;}public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res=new ArrayList<>();Stack<TreeNode> ss=new Stack<>();if(root==null) return res;TreeNode cur=root;ss.push(cur);//前序遍历是中左右,那改变左右顺序变成 中右左 最后反转就是左右中后序遍历while(!ss.empty()){cur=ss.pop();res.add(cur.val);if(cur.left!=null) ss.push(cur.left);if(cur.right!=null) ss.push(cur.right);}Collections.reverse(res);return res;
}
3、二叉树的层序遍历
class Solution {public List<List<Integer>> res=new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {//queue方法 offer peek poll linkedlist有sizeQueue<TreeNode> qq=new LinkedList<>();if(root==null) return res;qq.offer(root);while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size();List<Integer> tem=new ArrayList<>();while(len>0){TreeNode node=qq.poll();tem.add(node.val);if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;}res.add(tem);}return res;}
}
4、二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {Queue<TreeNode> qq=new LinkedList<>();LinkedList<List<Integer>> res=new LinkedList<>();//queue的运行类型是链表,但是还是只能使用queue定义的方法 offer add peek poll remove 多态//LinkedList双链表实现 dequeue 和list 方法addFirst addLast getFirst removeFirstif(root==null) return res;qq.add(root);while(!qq.isEmpty()){List<Integer> tem=new LinkedList<>();int len=qq.size();while(len-->0){TreeNode node=qq.poll();tem.add(node.val);if(node.left!=null) qq.add(node.left);if(node.right!=null) qq.add(node.right);}res.addFirst(tem);}return res;}
}
5、二叉树的右视图
Given the root
of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
class Solution {public List<Integer> rightSideView(TreeNode root) {Queue<TreeNode> qq=new LinkedList<>();List<Integer> res=new LinkedList<>();if(root==null) return res;qq.offer(root);while(!qq.isEmpty()){int len=qq.size();TreeNode node=null;while(len-->0){node=qq.poll();if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);}//每一层都弹出,node保留的是最右边的值res.add(node.val);}return res;}
}
6、二叉树的层平均值
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组
class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> res=new LinkedList<>();Queue<TreeNode> qq=new LinkedList<>();if(root==null) return res;qq.offer(root);while(!qq.isEmpty()){int len=qq.size();double sum=0;int i=len;while(i-->0){TreeNode node=qq.poll();sum+=node.val;if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);}//每一层都弹出,node保留的是最右边的值res.add(sum/len);}return res;}
}
7、N叉树的层序遍历
力扣题目链接(opens new window)
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<List<Integer>> levelOrder(Node root) {Queue<Node> qq=new LinkedList<>();List<List<Integer>> res=new LinkedList<>();if(root==null) return res;qq.offer(root);while(!qq.isEmpty()){int len=qq.size();Node node=null;List<Integer> tem=new LinkedList();while(len-->0){node=qq.poll();tem.add(node.val);if(node.children!=null){for(Node nn:node.children){qq.offer(nn);}}}//每一层都弹出,node保留的是最右边的值res.add(tem);}return res;}
}
8、在每个树行中找最大值
力扣题目链接(opens new window)
您需要在二叉树的每一行中找到最大的值。
Given the root
of a binary tree, return an array of the largest value in each row of the tree (0-indexed).
class Solution {public List<Integer> largestValues(TreeNode root) {//queue方法 offer peek poll linkedlist有sizeQueue<TreeNode> qq=new LinkedList<>();List<Integer> res=new ArrayList<>();if(root==null) return res;qq.offer(root);while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size();int big=qq.peek().val;while(len>0){TreeNode node=qq.poll();big=big>node.val?big:node.val;if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;}res.add(big);}return res;}
}
9、填充每个节点的下一个右侧节点指针
力扣题目链接(opens new window)
给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/class Solution {public Node connect(Node root) {//queue方法 offer peek poll linkedlist有sizeQueue<Node> qq=new LinkedList<>();if(root==null) return null;qq.offer(root);while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size();while(len>0){Node node=qq.poll();if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;if(len!=0){node.next=qq.peek();}}}return root;}
}
10、填充每个节点的下一个右侧节点指针II
力扣题目链接(opens new window)
这道题的答案和上一个一样,上一个题目是满二叉树,这道题的是普通二叉树
class Solution {public Node connect(Node root) {//queue方法 offer peek poll linkedlist有sizeQueue<Node> qq=new LinkedList<>();if(root==null) return null;qq.offer(root);while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size();while(len>0){Node node=qq.poll();if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;if(len!=0){node.next=qq.peek();}}}return root;}
}
11、二叉树的最大深度
力扣题目链接(opens new window)
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
class Solution {public int maxDepth(TreeNode root) {//queue方法 offer peek poll linkedlist有sizeQueue<TreeNode> qq=new LinkedList<>(); if(root==null) return 0;qq.offer(root);int depth=0;while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size(); while(len>0){TreeNode node=qq.poll();if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;}depth++;}return depth;}
}
12、二叉树的最小深度
力扣题目链接(opens new window)
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.
class Solution {public int minDepth(TreeNode root) {//queue方法 offer peek poll linkedlist有sizeQueue<TreeNode> qq=new LinkedList<>(); if(root==null) return 0;qq.offer(root);int depth=0;while(qq.size()!=0){//len代表每一层的节点数量int len=qq.size(); while(len>0){TreeNode node=qq.poll();if(node.left!=null) qq.offer(node.left);if(node.right!=null) qq.offer(node.right);len--;if(node.left==null&&node.right==null){return ++depth;}}depth++;}return depth;}
}
相关文章:
leetcode刷题——二叉树(1)
目录 1、递归遍历二叉树 2、迭代法遍历二叉树(通过while循环) 3、二叉树的层序遍历 4、二叉树的层次遍历 II 5、二叉树的右视图 6、二叉树的层平均值 7、N叉树的层序遍历 8、在每个树行中找最大值 9、填充每个节点的下一个右侧节点指针 10、填…...
HTML5教程-表格宽度设置,最大宽度,自动宽度
HTML表格宽度 参考:html table width HTML表格是网页设计中常用的元素之一,可以用来展示数据、创建布局等。表格的宽度是一个重要的参数,可以通过不同的方式来设置表格的宽度,本文将详细介绍HTML表格宽度的不同设置方式和示例代…...
【计算机网络】 —— 数据链路层(壹)
文章目录 前言 一、概述 1. 基本概念 2. 数据链路层的三个主要问题 二、封装成帧 1. 概念 2. 帧头、帧尾的作用 3. 透明传输 4. 提高效率 三、差错检测 1. 概念 2. 奇偶校验 3. 循环冗余校验CRC 1. 步骤 2. 生成多项式 3. 例题 4. 总结 四、可靠传输 1. 基本…...
力扣-图论-4【算法学习day.54】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
WiFi受限不再愁,电脑无网络快速修复指南
有时在试图连接WiFi时,会发现网络连接受限,或无法正常访问互联网。这种情况不仅影响了工作效率,还可能错过重要的信息。那么,究竟是什么原因导致了电脑WiFi连接受限呢?又该如何解决这一问题呢?小A今天就来教…...
《Java异常处理》
目录 一、异常的概念与分类 二、异常处理机制 三、异常的抛出 四、自定义异常 五、异常处理的最佳实践 在 Java 编程中,异常处理是保障程序健壮性和稳定性的关键环节。有效地处理异常能够避免程序因错误而崩溃,同时提供友好的错误提示信息ÿ…...
清风数学建模学习笔记——Topsis法
数模评价类(2)——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法,该方法的基本思想是,通过计算每个备选方案与理想解和负理想解之间的距离,从而评估每个…...
JVM 面试题
Java 虚拟机(JVM)是运行 Java 程序的引擎,它是 Java 语言 “一次编译,处处运行” 的核心技术。JVM 的主要任务是将 Java 字节码(Bytecode)解释成机器码并执行,负责内存管理、线程管理、垃圾回收…...
C语言蓝桥杯2023年省赛真题
文章目录 持续更新中...第一题题目描述输入格式输出格式样例输出提示 2 第二题题目描述 第三题题目描述输入格式输出格式样例输入样例输出 第四题题目描述输入格式输出格式样例输入样例输出提示 第四题题目描述输入格式输出格式样例输入样例输出提示 第五题题目描述输入格式输出…...
Flume基础概念
目录 作用组件构成ClientFlowAgentSourceSinkEvent 和Log4j的区别与定位事务传出流程输入到sourcesource端输入Channel 接收输入到SinkSink输出 作用 Flume可以从各种来源(如日志文件、消息队列、网络数据、文件系统、数据库等)收集数据,并将…...
哈希处理海量数据
接下来我们将以问题的形式来介绍如何用hash处理海量数据。 1.问题1 (位图) 给定100亿个整数,设计算法找到只出现一次的。 1.1问题分析 100亿个整数,一个整数占用4byte,那么就需要约40G左右的空间来存储。显然常见的…...
Go语言基础教程1
Go语言基础教程 目录 变量声明与使用基本数据类型常量切片操作字符串处理指针格式化输出参数 一、变量声明 1.1 基本变量声明 // 标准声明 var variableName variableType// 示例 var age int var name string1.2 变量声明与初始化 // 显式类型声明 var age int 30// 类…...
【每日一道面试题】for与foreach的区别(2024/12/6)
目录 foreach的特点遍历时删除时 foreach 和 for循环遍历数组的差别关于 foreach 和 for 循环的效率问题 首先我们要对foreach有个基本的了解,才能对它们进行区别 foreach的特点 遍历时 用foreach循环去遍历一个数组, 用foreach循环去遍历一个集合&…...
解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾
在数字化时代,开源已成为推动技术创新和知识共享的核心力量,尤其在数据领域,开源技术的涌现不仅促进了行业的快速发展,也让更多的开发者和技术爱好者得以参与其中。随着物联网、工业互联网等技术的广泛应用,时序数据库…...
React第十一节 组件之间通讯之发布订阅模式(自定义发布订阅器)
组件之间通讯常用方案 1、通过props 2、通过context 3、通过发布订阅模式 4、通过Redux 后面会有专栏介绍 什么情况下使用发布订阅模式 a、当我们想要兄弟组件之间通讯,而共同的父组件中又用不到这些数据时候; b、当多个毫无相关的组件之间想要进行数据…...
Vue 2与Vue 3项目中的屏幕缩放适配:使用vue2-scale-box和vue3-scale-box
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
Brain.js(九):LSTMTimeStep 实战教程 - 未来短期内的股市指数预测 - 实操要谨慎
系列的前一文RNNTimeStep 实战教程 - 股票价格预测 讲述了如何使用RNN时间序列预测实时的股价, 在这一节中,我们将深入学习如何利用 JavaScript 在浏览器环境下使用 LSTMTimeStep 进行股市指数的短期预测。通过本次实战教程,你将了解到如何用…...
云计算考试题
1、与SaaS不同的,这种“云”计算形式把开发环境或者运行平台也作为一种服务给用户提供。(B) A、软件即服务 B、基于平台服务 C、基于WEB服务 D、基于管理服务 2、云计算是对(D)技术的发展与运用 A、并行计算 B、网格计算 C、分布式计算 D、三个选项都是 3、Amazon.com公司…...
【设计模式】装饰器模式 在java中的应用
文章目录 1. 引言装饰器模式的定义与设计目的装饰器模式与其他设计模式的比较 2. 装饰器模式的结构组件接口(Component)具体组件(ConcreteComponent)装饰角色(Decorator)具体装饰类(ConcreteDec…...
【kafka】生产者的同步发送和异步发送
Kafka 的生产者端提供了同步发送和异步发送两种方式,适合不同的使用场景和性能需求。 以下是两种发送模式的详细讲解: 同步发送 概念 同步发送是指生产者在发送一条消息后,会阻塞当前线程,等待 Kafka 返回发送结果(…...
8. Debian系统中显示屏免密码自动登录
本文介绍如何在Debian系统上,启动后,自动免密登录,不卡在登录界面。 1. 修改lightDM配置文件 嵌入式Debian系统采用lightDM显示管理器,所以,一般需要修改它的配置文件/etc/lightdm/lightdm.conf,找到[Seat…...
SpringBoot 开源停车场管理收费系统
一、下载项目文件 下载源码项目文件口令: 【前端小程序地址】(3.0):伏脂火器白泽知洞座/~6f8d356LNL~:/【后台管理地址】(3.0):伏脂火器仇恨篆洞座/~0f4a356Ks2~:/【岗亭端地址】(3.0):动作火器智汇堂多好/~dd69356K6r~:/复制口令…...
QT的ui界面显示不全问题(适应高分辨率屏幕)
//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高,默认情况下,打开QT的ui界面,显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高,可以尝试以下方案:自…...
双向链表的模拟实现 —— LinkedList
MyLinkedList类 public class MyLinkedList {// 定义节点类static class Node {int val;Node prev;Node next;public Node() {}public Node(int val) {this.val val;}}// 定义头节点private Node head;// 定义尾结点private Node tail;// 头插public void headInsert(int val…...
速盾:高防cdn预热指定url就只刷新这个吗?
高防CDN预热是指在网站上线或更新之前,将网站内容缓存到CDN节点服务器上,以提高用户访问网站的速度和稳定性。通常,预热可以通过指定URL来进行,而不是刷新整个网站。 预热指定URL的好处是可以选择性地进行缓存刷新,而…...
JDK21新特性
目录 虚拟线程(JEP 444): 顺序集合(JEP 431): 字符串模板(JEP 430): 模式匹配的增强(JEP 440、441以及443): 结构化并发和作用域值…...
json学习
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。它通常用于在服务器和客户端之间交换数据,特别是在 Web 应用中。 JSON 格式基于 JavaScript 对象表示法&#…...
005-mysql常用的名称
语言分类 DDL :数据定义语言 1、线上DDL语句在对表操作,是要锁元数据表的,此时所有的修改类的命令无法正常运行。 2、对大表在高峰期进行DDL操作,可以使用工具:pt-online-schema-change gh-ost 工具(8.0以…...
PostgreSQL和MySQL区别
PostgreSQL 和 MySQL 有以下一些主要区别: 一、功能特性 1. 数据类型支持 - PostgreSQL:支持丰富的数据类型,包括数组、JSON、JSONB、hstore(键值对存储)、范围类型等。例如,可以直接在数据库中存储和查…...
Android笔记(三十四):onCreate执行Handler.post在onResume后才能执行?
背景 偶然发现一个点,就是在onCreate执行Handler.post在onResume后才执行,以下是测试代码 多次运行的结果一致,为什么execute runnable不是在onCreate和onResume之间执行的呢,带着疑问撸了一遍Activity启动流程 关键源码分析 …...
动手学深度学习d2l包M4芯片 gpu加速
conda创建环境 CONDA_SUBDIRosx-arm64 conda create -n ml python3.9 -c conda-forge conda env config vars set CONDA_SUBDIRosx-arm64 conda activate mlpip安装包 pip install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/n…...
游戏引擎学习第35天
开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统,使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界,其中包含按需存储的小区域。昨天,我们介绍了“内存区域”的概念,用于管理持久性存储。我们计划今天继续…...
Python 3 和 MongoDB 的集成使用
Python 3 和 MongoDB 的集成使用 MongoDB 是一个流行的 NoSQL 数据库,以其灵活的数据模型和强大的查询功能而闻名。Python 3 作为一种广泛使用的编程语言,与 MongoDB 的集成变得日益重要。本文将介绍如何在 Python 3 环境中集成和使用 MongoDBÿ…...
MperReduce学习笔记下
自定义InputFormat合并小文件 案例需求 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案。 案例分析 小文件的优化无非以下几种方式: …...
react + antd desgin 使用form功能时upload,radio,checkbox不能回显的问题
最近使用react开发 遇到form回显的问题 ,处理upload回显的问题,提示 react-refresh:160 Warning: [antd: Upload] value is not a valid prop, do you mean fileList? 查看文档后,在form.item 组件下有一个特殊属性 valuePropName 子节点的值…...
【NLP修炼系列之Bert】Bert多分类多标签文本分类实战(附源码下载)
引言 今天我们就要用Bert做项目实战,实现文本多分类任务和我在实际公司业务中的多标签文本分类任务。通过本篇文章,可以让想实际入手Bert的NLP学习者迅速上手Bert实战项目。 1 项目介绍 本文是Bert文本多分类和多标签文本分类实战,其中多分…...
OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)
前言 1、前面写过一篇 阿里云免费ssl证书申请与部署,大家可以去看下 2、建议大家看完本篇博客,可以再去了解 openssel 命令 openssl系列,写的很详细 一、openssl 安装说明 1、这部分就不再说了,我使用centos7.9,是自…...
YOLOv11改进,YOLOv11添加U-Netv2分割网络中SDI信息融合模块,助力小目标检测
摘要 理论介绍 SDI模块的架构: 平滑卷积(SmoothConv):用于平滑特征图,帮助减少噪声并使得特征更加稳定。Hadamard积:用于在特征图中进行逐元素相乘(点乘),以加强语义信息和细节信息的融合。通道注意力(ChannelAttention):利用通道注意力机制来自动关注重要的特征通…...
flex布局 flex-end为什么overflow无法滚动及解决方法
flex-end为什么overflow无法滚动及解决方法 在使用Flexbox布局时,我们经常使用justify-content和align-items属性来定位子元素。其中,align-items属性用于控制子元素在交叉轴上的位置,例如顶部对齐、底部对齐或居中对齐等。当我们将align-it…...
从ground_truth mask中获取图像的轮廓图
引言 在图像取证领域,主要分为检测和定位两个方面。检测就是判断一张图片是否为伪造图,定位与传统意义上的语义分割任务相近,就是定位伪造像素的区域。如果单纯使用语义分割网络训练,只能获得次优解,而像多任务学习那样…...
Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展,旅游已经成为人…...
开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?
在选择即时通讯软件时,应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异,因此总结两个点简要分析这两种选择,有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…...
【计算机网络】实验15:VLAN间通信的实现方法“单臂路由”
实验15 VLAN间通信的实现方法“单臂路由” 一、实验目的 加深对VLAN间通信的实现方法“单臂路由”的理解。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑,并配置好主机的IP地址、子网掩码、默认网关,如图1,2所…...
数据库学习记录04
DDL【数据定义语言】 MySQL命名规则 数据库名不得超过30个字符,变量名限制为29个必须只能包含A-Z,a-z,0-9,_共63个字符不能在对象名的字符间留空格必须不能和用户定义的其他对象重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突保持字段名和类型的一致…...
PDF文件打开之后不能打印,怎么解决?
正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…...
A* 算法 是什么?
A*(A-star)算法是一种启发式搜索算法,用于在图或网格中找到从起点到目标的最短路径。它被广泛用于路径规划问题,例如导航、游戏开发中的角色移动,以及机器人路径规划。 1. A 算法的基本概念* A* 算法结合了两种经典搜…...
ORM框架详解:为什么不直接写SQL?
想象一下,你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者,你可能会想:“我已经学会了SQL,为什么还要使用ORM框架呢?直接写SQL语句不是更简单、更直接吗?” 如…...
厘米级高精度RTK手持终端北斗卫星定位手持pda
RTK是一种测量技术叫“载波相位差分技术”,是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标,以此得到高精度坐标。随着技术的不断革新,GPS接收机也由原来只能用…...
Kafka-Connect源码分析
一、上下文 《Kafka-Connect自带示例》中我们尝试了零配置启动producer和consumer去生产和消费数据,那么它内部是如何实现的呢?下面我们从源码来揭开它神秘的面纱。 二、入口类有哪些? 从启动脚本(connect-standalone.sh&#…...
【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…...