【二叉树】java实现代码,详解二叉树,带大家更深刻的掌握二叉树递归思想
前言:
大家好,我是良辰丫🪐🪐🪐,在探索数据结构的旅程中,二叉树可以说是数据结构中的重点,笔试面试经常出现的问题,同时也是难点。🐥🐥🐥不要看到难就感觉到畏惧,多去刷题,多去感悟,其实一切没大家想的那么难。我们接下来去探索二叉树的海洋。🍣🍣🍣
🧑个人主页:良辰针不戳
📖所属专栏:java数据结构
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💌作者能力有限,可能也会出错,欢迎大家指正。
💞愿与君为伴,共探Java汪洋大海。
目录
- 1、树
- 1.1 树型结构
- 1.2 非树
- 1.3 树的相关概念
- 1.4 树的一些代码表现形式
- 2、二叉树
- 2.1 两种特殊的二叉树
- 2.1.1 满二叉树
- 2.2.2 完全二叉树
- 2.3 二叉树的性质
- 2.4 二叉树的代码表示
- 3、二叉树的遍历
- 3.1 前序遍历
- 3.2 中序遍历
- 3.3 后序遍历
- 4、三种遍历代码实现
- 4.1 前序遍历
- 4.2 中序遍历
- 4.3 后序遍历
- 5、二叉树常见的基本操作代码
- 5.1 获取树中节点的个数
- 5.2 获取叶子节点的个数
- 5.3 获取第K层节点的个数
- 5.4 获取二叉树的高度
- 5.5 检测值为value的元素是否存在
- 5.6 层序遍历
- 5.7 判断一棵树是不是完全二叉树
1、树
树是人们日常生活中常见的,我在网上找了一个苹果树,简单的看一下树的结构,有根,有分枝,有叶子等。
接下来我们先简单了解一下树形结构。
1.1 树型结构
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
- 有一个特殊的结点,称为根结点,根结点没有前驱结点。
- 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti (1 <= i <=m) 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。
- 因为树很复杂,从根到节点,普通方法难以描述,因此我们往往采取递归的定义方法。
下面就是一个简单的树结构,每个根节点可以有多个分支,例如D作为父亲节点的时候,有三个孩子节点,G,H,I。
1.2 非树
如下图,A的孩子节点C和D连在一起,这种形成封闭式的图形就不是树形结构。
那么什么是树呢?
- 子树不能相交(不能形成封闭图形)。
- 除了根节点外,每个节点只有一个父亲节点。
- 一个n个节点的树有n-1条边。
1.3 树的相关概念
在学习树形结构的时候,我们需要去了解相关概念,不对,是掌握相关概念,真正深入了解了相关概念,才能灵活快速的去写出所谓好的代码,嘿嘿嘿。
结点的度
:一个结点含有子树的个数称为该结点的度; 如上图:A的度为3。树的度
:一棵树中,所有结点度的最大值称为树的度; 如上图:树的度为3。叶子结点或终端结点
:度为0的结点称为叶结点; 如上图:D、E、B、G…等节点为叶结点双亲结点或父结点
:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:R是A的父结点。孩子结点或子结点
:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是R的孩子结点根结点
:一棵树中,没有双亲结点的结点;如上图:R。结点的层次
:从根开始定义起,根为第1层,根的子结点为第2层,以此类推,上图中D的层次为3。树的高度或深度
:树中结点的最大层次; 如上图:树的高度为4。非终端结点或分支结点
:度不为0的结点; 如上图:A,C…等节点为分支结点。兄弟结点
:具有相同父结点的结点互称为兄弟结点; 如上图:A、B、C是兄弟结点。堂兄弟结点
:双亲在同一层的结点互且父亲节点不同的几个节点为堂兄弟;如上图:D、F互为堂兄弟结点。结点的祖先
:从根到该结点所经分支上的所有结点;如上图:R是所有结点的祖先。子孙
:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是R的子孙。森林
:由m(m>=0)棵互不相交的树组成的集合称为森林。也就是一些树合起来成为一片森林,一棵树也是特殊的森林。
1.4 树的一些代码表现形式
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。我们这里就简单的了解其中最常用的孩子兄弟表示法。
下面是孩子兄弟法表示的一个代码块,可以有多个孩子。
class Node {
int value; // 树中存储的数据,可以是其它类型。
Node firstChild; // 第一个孩子引用
Node secondChild; // 第二个孩子引用
}
了解了这么多树的概念,想必大家对树形结构有了很深刻的认识,接下来我们就引入重点。🚀二叉树🚀。
2、二叉树
我们了解了树的一个父亲节点可以有多个分支,然而,二叉树最多只有两个分支。因此我们就可以简单的定义一下二叉树。
- 可以有空子树。
- 至少有一个父亲节点有两个孩子。
- 一个父亲节点最多有两个孩子节点。
注意:我们上述的三个条件只是作为研究二叉树的简单条件,空数,一个节点等也可以认为是二叉树。
2.1 两种特殊的二叉树
2.1.1 满二叉树
满二叉树
: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。也就是说,如果一棵二叉树的层数为K,且结点总数是 ,则它就是满二叉树。
2.2.2 完全二叉树
完全二叉树
: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
也许看了上面的图对完全二叉树的概念还有点模糊,没关系,咱们举一个反面例子。下面的图3号位置和6号位置没有数据,最后一个数据为E,所在位置为5,1~5中间的位置其中3号位置为空,那么该二叉树就不是完全二叉树,如果找到了最后一个位置,依次编号后,从第一个节点到最后一个节点中间没有空缺位置,那么这个二叉树就是一个完全二叉树。
现在是不是对完全二叉树的概念有了深刻的理解了呢?既然这样,那么我们就去探索一下二叉树的性质吧。
2.3 二叉树的性质
- 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有 (i>0)个结点。
- 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 (k>=0)。
- 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1。
- 具有n个结点的完全二叉树的深度k为 上取整。
- 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i的结点有:
若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点。
若2i+1<n,左孩子序号:2i+1,否则无左孩子。
若2i+2<n,右孩子序号:2i+2,否则无右孩子。
2.4 二叉树的代码表示
二叉树有很多代码表示形式,在这里我们选择最常用的链式存储中的孩子表示法。既然有链式存储,也会有顺序存储,在后面我们学到了堆的时候再具体介绍。
class Node {
int val; // 数据域
Node left; // 左孩子
Node right; // 右孩子
}
3、二叉树的遍历
二叉树常用的遍历方式有三种。
- 前序遍历
- 中序遍历
- 后序遍历
3.1 前序遍历
根节点 → 左子树 → 右子树
上图的前序遍历顺序为:124536
刚开始有点小伙伴可能有些不理解,大家只要记住,把父亲节点的左树当成一个整体,右树当成一个整体。
- 前序遍历先遍历根,那么先打印1。
- 然后遍历左树,左树的根为2,打印2。
- 接着遍历2的左树,打印4。
- 4的左树为空,回退到4,4的右树为空,再回退,回退到2说明2的左树打印完了。
- 最后打印2的右树,打印5。
- 5的左树和右树为空,进行回退,回退到1的时候,说明1的左树打印完了。
- 打印3,此时3作为根节点。
- 3的左树为6,打印6。
- 6的左树和右树为空,那么进行回退操作,回退到3的时候发现3的右树为空。
- 继续回退,此时回退到根节点1的时候说明打印完了。
3.2 中序遍历
左树 → 根节点 → 右树
上图的中序遍历顺序为:425163
和前序遍历的方法基本一样,只不过顺序变了而已。
- 从根出发,寻找左树的叶子节点,4的左右子树为空,打印4。
- 回退到2,2作为4的父亲节点,打印2。
- 2的右树为5,而5的左右子树都为空,直接打印5。
- 此时进行回退,回退到1时打印1。
- 这个时候,1的左树打印完了,根节点1也打印了,进行右树操作。
- 走到3时,找左树,3的左节点为6,而6的左右节点都为空,那么直接打印6。
- 回退到3打印3。
- 3的右树为空进行回退,回退到1时结束,打印完成。
3.3 后序遍历
左树 → 右树 → 根节点
上图的后序遍历顺序为:452631
- 顺着左树走,找到了4,4作为根节点,左右子树都为空,打印4。
- 回退到2,2的右树为5,5的左右子树都为空,直接打印5。
- 此时回退到2,打印2。
- 回退到1,此时说明左树已经遍历完了,接着遍历右树。
- 走到3,3的左树为6,6的左右子树为空,打印6。
- 回退到3,3的右树为空,打印3。
- 回退到1,打印1,然后结束。
看完三种遍历方式,不知道大家是否发现了规律,无论是三种遍历的哪一种,每一个节点都要经过三次,前序遍历在经过第一次的时候打印该节点,中序遍历在经过第二次的时候打印该节点,后序遍历在经过第三次的时候打印该节点。哈哈,学习是一个探索的过程,接下来我们就要进行三种遍历的代码书写。
4、三种遍历代码实现
这里主要是递归实现,后面我会发一些非递归,慢慢来,一口不能吃成一个胖子,循序渐进,加油。
4.1 前序遍历
public void preOrder(TreeNode root) {if(root == null) {return;}System.out.print(root.val+" ");preOrder(root.left);preOrder(root.right);}
4.2 中序遍历
public void inOrder(TreeNode root) {if(root == null) {return;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}
4.3 后序遍历
public void postOrder(TreeNode root) {if(root == null) {return;}postOrder(root.left);postOrder(root.right);System.out.print(root.val+" ");}
5、二叉树常见的基本操作代码
5.1 获取树中节点的个数
public int size(TreeNode root) {if(root == null) {return 0;}int leftSize = size(root.left);int rightSize = size(root.right);return leftSize + rightSize + 1;}
5.2 获取叶子节点的个数
int getLeafNodeCount(TreeNode root) {if(root == null) {return 0;}if(root.left == null && root.right == null){return 1;}int leftSize = getLeafNodeCount(root.left);int rightSize = getLeafNodeCount(root.right);return leftSize+rightSize;}
5.3 获取第K层节点的个数
int getKLevelNodeCount(TreeNode root,int k) {if(root == null) {return 0;}if(k == 1) {return 1;}int leftSize = getKLevelNodeCount(root.left,k-1);int rightSize = getKLevelNodeCount(root.right,k-1);return leftSize+rightSize;}
5.4 获取二叉树的高度
public int getHeight(TreeNode root) {if(root == null) {return 0;}return (getHeight(root.left) > getHeight(root.right)) ?(getHeight(root.left)+1):(getHeight(root.right)+1);}
5.5 检测值为value的元素是否存在
TreeNode find(TreeNode root, int val) {if(root == null) {return null;}if(root.val == val) {return root;}TreeNode leftTree = find(root.left,val);if(leftTree != null) {return leftTree;}TreeNode rightTree = find(root.right,val);if(rightTree != null) {return rightTree;}return null;//没有找到}
5.6 层序遍历
public void levelOrder(TreeNode root) {if(root == null) {return;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {TreeNode cur = queue.poll();System.out.print(cur.val+" ");if(cur.left != null) {queue.offer(cur.left);}if(cur.right != null) {queue.offer(cur.right);}}}
5.7 判断一棵树是不是完全二叉树
boolean isCompleteTree(TreeNode root){if(root == null) {return true;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {TreeNode cur = queue.poll();if(cur != null) {queue.offer(cur.left);queue.offer(cur.right);}else {break;}}while (!queue.isEmpty()) {TreeNode tmp = queue.poll();if(tmp != null) {return false;}}return true;}
后序:
一个二叉树写了很久,嘿嘿嘿,手有点酸,但是内心还是蛮开心的,自己在写博客的过程中也了解到一点细节,今天的自己又学到了一些知识,加油,未来可期。⛽⛽⛽
相关文章:
oracle RDBMS Kernel Executable 占用内存过高
oracle RDBMS Kernel Executable 占用内存过高 参考:https://www.cnblogs.com/markkang/archive/2019/11/25/11925406.html cmd:sqlplus /nolog 连接数据库:conn / as sysdba; Oracle 11g 版本后,可以修改MEMORY_MAX_TARGET 值来设置想要的内存(这里设置为 1024M):alter…...
两个栈模拟一个队列(Stacks Imitate Queue)
/**************************************************************************** @file name: :StacksSimulateQueue* @brief :两个栈实现队列的功能* @author :wvjnuhhail@126.com* @date :2024/04/26* @version 1.0 :V1.0* @property :None* @note :…...
Rust HTTP 客户端:易于使用、功能强大 | 开源日报 No.228
seanmonstar/reqwest Stars: 8.9k License: Apache-2.0 reqwest 是一个易于使用且功能强大的 Rust HTTP 客户端。 异步和阻塞客户端支持普通数据、JSON、urlencoded 和 multipart 数据格式可定制的重定向策略支持 HTTP 代理和系统原生 TLS 或 rustls 的 HTTPSCookie 存储功能…...
RedisHttpSession反序列化UID问题跟踪
1.RedisHttpSession配置 package com.visy.configure;import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;Configuration EnableRedisHttpSession(maxInactive…...
甲辰年三月十八晨思
甲辰年三月十八晨思 天宇云雾绕,星君各有属。 历程近者忧,岁月长河富。 浮躁欲念多,沉静寻本路。 同道共频舒,易感橘枳渡。...
OBMysql4.3.0.1的升级与备份恢复
OBMysql4.3.0.1的升级与备份恢复吐槽 OBMysql开源版本的升级路线图太操蛋了. 我最开始安装的是 4.2.2.0 的版本 耗费了一个多小时想升级 4.3.0.1 发现总是报错 自己以为是自己的人品有问题. 结果尝试升级 4.2.2.1 就可以升级 现在明显是 升级路线有问题. [ERROR] fail to get …...
【二叉树】java实现代码,详解二叉树,带大家更深刻的掌握二叉树递归思想
前言: 大家好,我是良辰丫🪐🪐🪐,在探索数据结构的旅程中,二叉树可以说是数据结构中的重点,笔试面试经常出现的问题,同时也是难点。🐥🐥Ǵ…...
【论文翻译】Jointformer :一种基于误差预测和改进的三维人体姿态估计的单帧提升变压器
摘要 单目三维人体姿态估计技术有望极大地提高人体运动数据的可用性。表现最好的单幅图像2D3D提升模型使用图卷积网络(GCNs),通常需要一些手动输入来定义不同身体关节之间的关系。我们提出了一种新的基于变压器的方法,该方法使用更广泛的自我注意机制来…...
Linux用户管理
✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分…...
第四十六章 动态规划——状态机模型
第四十六章 动态规划——状态机模型一、通俗理解状态机DP1、什么是状态机2、什么是状态机DP二、例题1、AcWing 1049. 大盗阿福(1)问题(2)分析a.状态定义b.状态转移c.循环设计d.初末状态(3)代码2、AcWing 10…...
Idea中指定xml文件失效
目录一、🐇 项目场景:二、🐇 问题描述三、🐇 原因分析:四、🐇 解决方案:一、🐇 项目场景: 最近狮子在搞一个项目,需要用到数据库多表查询,所以在…...
【华为上机真题】工号不够用咋办
🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…...
【蓝桥云课】大整数相加与相乘——字符串模拟
一、大整数相加 思路分析: 输入两个整数a1456、b789,输出两个整数相加的结果。 ①将两个整数翻转 个位十位百位千位a6541b9870 ②相加计算,逢十进一 a0b06915a_0b_06915a0b06915(进1留5) a1b158114a_1b_158114a…...
泊松过程与排队论
全国同理:随机过程随机会过 ......唉 你说热统,他为什么要搭配着随机过程一起学 ......唉 你说数模比赛 为什么不能白送一个奖牌小摘要泊松过程泊松过程来到间隔与等待时间的分布来到时刻的条件分布M/G/1 忙期非齐次泊松过程复合泊松过程条件泊松过程排队系统输入常见的输入分布…...
告别3D-DNA试试chromap和yahs做Hi-C辅助组装吧
之前使用的是3D-DNA流程做Hi-C的辅助组装,它的最大优势就是输出结果可以对接下游的JBAT(juicerbox with Assembly Tools)进行手动矫正。然而它点缺陷也很明显,处理速度不够快,且对植物的优化不行,同时目前许久不更新了。 最近我发…...
Kettle(9):排序记录组件
1 组件介绍 排序组件可以将Kettle数据流中的数据进行排序,可以指定升序、还是降序排列 2 需求 使用Kettle将t_user表中的用户数据,按照年龄升序排序,并将排序后的数据装载到Excel 3 构建Kettle数据流图 效果图...
LVS+keepalived(双主)+Nginx实现高可用负载均衡
#为什么采用双主架构: 单主架构只有一个keepalived对外提供服务,该主机长期处于繁忙状态,而另一台主机却很空闲,利用率低下 #双主架构的优点: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现…...
力扣 2299. 强密码检验器 II
题目 如果一个密码满足以下所有条件,我们称它是一个 强 密码: 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为:“!#$%^&*()-” 中的一个。…...
[GWCTF 2019]枯燥的抽奖
目录 信息收集 知识回顾 解题思路 信息收集 查看源码,发现check.php <?php #这不是抽奖程序的源代码!不许看! header("Content-Type: text/html;charsetutf-8"); session_start(); if(!isset($_SESSION[seed])){ $_SESSIO…...
初入职场的我认识到linux的重要性
先自我介绍下,我是一名普通的软件工程专业的本科毕业生,今年刚毕业,软件工程的课程超级多,有程序设计基础、面向对象程序设计、软件工程导论、离散结构、数据结构与算法、计算机系统基础、操作系统、数据库概论、网络及其计算等等…...
数据库系统概述
文章目录一、数据、数据库、数据库管理系统、数据库系统1.数据2.数据库(DB)3.数据库管理系统(DBMS)1)数据定义2)数据组织、存储和管理3)数据操纵4)事务管理和运行管理5)数…...
【算法基础】快速排序(分治思想)
一、快速排序原理 1. 算法介绍 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(记左端为L,最右端为R) 分界点的选取有如下四种方法:(1)q[L];(2)q[(L+R)/2];(3)q[R];(4)随机选取 (2)…...
JavaEE-初识网络
目录一、局域网二、广域网三、网络通信基础3.1 IP地址3.2 端口号3.3 协议四、协议分层五、封装和分用一、局域网 局域网,网络种类,覆盖范围一般是方圆几千米之内,其具备的安装便捷、成本节约、扩展方便等特点使其在各类办公室内运用广泛。局…...
【23】C语言 | 初阶结构体
目录 1、结构的基础知识 2、结构成员的类型 3、结构体初始化 4、结构体的访问 5、结构体传参 1、结构的基础知识 结构是这些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组:一组相同类型的元素的集合 结构体:也是…...
【笔记】SemGCN
一. 论文总结 1.1 核心贡献 提出了一种改进的图卷积操作,称为语义图卷积(SemGConv),它源自cnn。其关键思想是学习图中暗示的边的信道权值,然后将它们与核矩阵结合起来。这大大提高了图卷积的能力。其次,我们引入了SemGCN&#x…...
Python机器学习:一元回归
→\rightarrow→回归效果评价 🌕 一元回归 一元回归主要研究一个自变量和一个因变量之间的关系,而这个自变量和因变量之间的关系又可分为线性回归和非线性回归。 ⭐️ 一元线性回归分析两个变量之间的线性关系,如ykxbykxbykxb中xxx和yyy就是…...
四轮两驱小车(三):STM32驱动MPU6050进行转弯
前言: 寒假已经过了一半了,前段时间跟学弟一起从零开始搞了一下深度学习,现在才想起来这个系列还没有更完。本篇博客主要介绍一下这个小车转直角弯的神器----MPU6050 MPU6050介绍: 我所采用的MPU6050是某宝上十几块钱的这种&…...
C++:类的static成员,友元和构造函数初始化列表
目录 一.类的构造函数的初始化列表 1.类的构造函数初始化列表的引入和介绍 2.初始化列表用于类的类对象成员的拷贝构造函数的调用 3.初始化列表的使用细则 4.使用初始化列表的一个注意事项 二.explicit关键字 三.C类的static成员 1.类中static修饰的成员变量 2.类中st…...
用友U8和旺店通企业版淘宝奇门单据接口集成
用友U8和旺店通企业奇门单据接口集成对接系统:旺店通企业奇门慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取、会员管理、仓库管理等其他重要经营模块。慧策的产品线从旺店通E…...
Java-黑马Java学习作业-day11集合学生管理系统
学习视频链接:https://www.bilibili.com/video/BV17F411T7Ao 文章目录题目1-将数组存放在集合中题目2-教师信息查看题目3-员工信息删改查操作题目4(综合)-图书管理系统题目1-将数组存放在集合中 现有如下字符串元素:[“aaa”, “…...
【Linux】冯诺依曼体系结构与操作系统概念理解
👑作者主页:安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 文章目录一、前言二、冯诺依曼体系结构1、体系简述2、内存的重要性3、硬件方案解释软件行为4、体系结构中的数据流动5、拓展三、操作系统简述…...
protegeproject/mapping-masterPublic
protegeproject/mapping-masterPublicWatch 10 Fork 7Fork your own copy of protegeproject/mapping-masterStar 44CodeIssues15Pull requests3ActionsProjectsWikiSecurityInsightsMappingMasterDSL编辑新页面马丁奥康纳编辑了此页面 on Oct 29, 2020 85 修订页面4家Mapping…...
大数据分析案例-基于随机森林算法构建人口普查分析模型
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【数据结构和算法】认识线性表中的链表,并实现单向链表
本文接着上文,上文我们认识了线性表的概念,并实现了静态、动态顺序表。接下来我们认识一个新概念链表。并实现单向链表的各种操作。顺序表还有不明白的看这一篇文章 (13条消息) 【数据结构和算法】实现线性表中的静态、动态顺序表_小王学代码的博客-CSDN…...
2023-1-28
具有给定数值的最小字符串 题目描述 小写字符 的 数值 是它在字母表中的位置(从 1 开始),因此 a 的数值为 1 ,b 的数值为 2 ,c 的数值为 3 ,以此类推。 字符串由若干小写字符组成,字符串的数…...
Linux_常见命令
1.ls ls -l 列出隐藏文件,并显示10项权限,类似如同下图 在部分发行版本的linux下,ll等同于ls -l 首先,第一列为-则代表着这一列是文件, 第一列为d则代表这一列为目录 除了第一位,那么其他还有9位,分为3组…...
【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…
能一个人走的路别抱有任何期待,死不了 文章目录一、关于文件的重新认识二、语言和系统级的文件操作(语言和系统的联系)1.C语言文件操作接口(语言级别)1.1 文件的打开方式1.2 文件操作的相关函数1.3 细节问题2.系统级文…...
ffmpeg无损裁剪、合并视频
我用的版本是 ffmpeg version git-2020-06-23-ce297b4 官方文档 https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax 时间格式 [-][HH:]MM:SS[.m...] 或 [-]S[.m...][s|ms|us]裁剪视频 假设需要裁剪视频aaa.mp4,第5秒到第15秒 ffmpeg -ss 5 -to 15 -i…...
ATAC-seq分析:Annotating Peaks(9)
1. 注释开放区域 将已识别的无核小体区域与基因组特征(如基因和增强子)相关联通常很有趣。 一旦注释到基因或增强子的基因,我们就可以开始将 ATACseq 数据与这些基因的特征相关联。 (功能注释、表达变化、其他表观遗传状态&#x…...
蓝桥杯刷题015——最少刷题数(二分法+前缀和)
问题描述 小蓝老师教的编程课有 N 名学生, 编号依次是 1…N 。第 i 号学生这学期刷题的数量是 Ai 。 对于每一名学生, 请你计算他至少还要再刷多少道题, 才能使得全班刷题比他多的学生数不超过刷题比他少的学生数。 输入格式 第一行包含一个正整数 N 。 第二行包含 N 个整数:…...
Linux——进程
目录 冯诺依曼体系结构 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程…...
Junit单元测试框架【基础篇】
Junit单元测试框架【基础篇】🍎一.Junit单元测试框架🍒1.1 注解🍒1.2 断言🍒1.3 用例执行顺序🍒1.4 测试套件🍉1.4.1 指定类🍉1.4.1 指定包🍒1.5 参数化🍉1.5.1 单参数&a…...
高通平台开发系列讲解(WIFI篇)什么是WLAN无线局域网
文章目录 一、什么是WLAN1.1、WLAN发展史1.2、WLAN工作频段二、高通相关文件2.1、配置文件2.2、开机启动2.3、wpa_supplicant沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将基于高通平台介绍什么是无线局域网。 一、什么是WLAN 在WLAN领域被大规模推广和商用的是…...
JavaScript 变量
JavaScript 变量 变量是什么? 变量是计算机中用来存储数据的“容器”,它可以让计算机变得有记忆,通俗的理解变量就是使用【某个符号】来代表【某个具体的数值】(数据) JavaScript 变量 与代数一样,JavaScript 变量…...
C语言进阶——文件管理
每当我们写好一段代码运行结束之后,再次运行的时候就会发现,之前在终端上输入的数据都会消失,那么如何把之前输入的数据保存下来呢? 我们一般把数据持久化的方式有把数据存放在磁盘文件中、存放到数据库。打印等方式进行保存。 …...
[Rust笔记] 规则宏的“卫生保健”
规则宏代码的“卫生保健”规则宏mbe即是由macro_rules!宏所定义的宏。它的英文全称是Macro By Example。相比近乎“徒手攀岩”的Cpp模板元编程,rustc提供了有限的编译时宏代码检查功能(名曰:Mixed Hygiene宏的混合保健)。因为rust…...
芒果改进YOLOv7系列:超越ConvNeXt结构,原创结合Conv2Former改进结构,Transformer 风格的卷积网络视觉基线模型,高效涨点
💡该教程为改进进阶指南,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:芒果改进YOLOv7系列:超越ConvNeXt结构,原创结合Conv2Former改进结构,Transformer 风格的卷积网络视觉基线模型,高效涨点、…...
Java---微服务---RabbitMQ部署
RabbitMQ部署1.单机部署1.1.下载镜像1.2.安装MQ1.3访问管理端2.集群部署2.1.集群分类2.2.设置网络1.单机部署 我们在Centos7虚拟机中使用Docker来安装,如未安装dockr,请参考《Centos7安装Docker》 1.1.下载镜像 方式一:在线拉取 docker …...
别总写代码,这130个网站比涨工资都重要
今天推荐一些学习资源给大家,当然大家可以留言评论自己发现的优秀资源地址 搞学习 找书籍 冷知识 / 黑科技 写代码 资源搜索 小工具 导航页(工具集) 看视频 学设计 搞文档 找图片 搞学习 TED(最优质的演讲)࿱…...
Python 类方法简记
文章目录前言必须实例化的类方法使用静态装饰器的类方法使用类装饰器的类方法省流版本ref:前言 Python 的类可以有特定的方法。下面是三种设计类方法的模板。 class A(object):a adef foo1(self, name):print hello, namestaticmethoddef foo2(name):print hello, nameprint…...
分享136个ASP源码,总有一款适合您
ASP源码 分享136个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 136个ASP源码下载链接:https://pan.baidu.com/s/11db_K2QXns5pm8vMZBVPSw?pwds0lb 提取码&#x…...
【Python百日进阶-Web开发-Peewee】Day241 - Peewee 安装和测试、快速开始
文章目录 一、安装和测试1.1 使用 git 安装1.2 运行测试1.3 可选依赖项1.4 关于 SQLite 扩展的注意事项二、快速开始2.1 模型定义2.2 存储数据2.3 检索数据2.3.1 获取单条记录2.3.2 记录列表2.3.3 排序2.3.4 组合过滤器表达式2.3.5 聚合和预取2.3.6 SQL 函数2.4 数据库2.4.1 使…...
手机提供GMS支持(适用安卓和鸿蒙系统)
手机提供GMS支持 - 适用安卓和鸿蒙系统前言方式1:安装GMS套件(不推荐)方式2:安装OurPlay(推荐)方式3:安装Gspace(推荐)前言 本文提供多种为手机(安卓和鸿蒙系…...
[JavaEE]线程池
专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. 线程池是什么? 2. 线程池的实现原理 3. 标准…...
Redis缓存污染了怎么办?
我们应用Redis缓存时,如果能缓存会被反复访问的数据,那就能加速业务应用的访问,但是,如果发生了缓存污染,那么,缓存对业务应用的加速作用就减少了。 在一些场景下,有些数据被访问的次数非常小&…...
特斯拉印证成本仍是工业制造取胜的关键,反证中国制造的优势
近20年来,业界对于工业制造的竞争优势开始逐渐偏离成本控制,然而如今特斯拉在全球的成功却正在印证着工业制造的成功仍然在于成本,成本才是工业制造取胜的关键,其他任何被吹嘘的个性化、创新等全都是骗人的把戏。特斯拉的成功曾被…...
就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式
3、LVS/DR 模式 实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…...
对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控+AMG(AWS云 grafana)
问题 需要在针对已有的EKS k8s集群启用Prometheus指标监控。而且,这里使用AMP即AWS云的Prometheus托管服务。好像这个服务,只有AWS国际云才有,AWS中国云没得这个托管服务。下面,我们就来尝试在已有的EKS集群上面启用AMP监控。 步…...
设计模式-行为型模式-观察者模式
观察者模式用于定义对象间的一种一对多的依赖关系,使得当一个对象状态变化时,其所有依赖对象都会收到通知并自动更新 /*** 行为型模式--观察者模式* 观察者模式用于定义对象间的一种一对多的依赖关系,使得当一个对象状态变化时,其…...
管理集群工具之LVS
管理集群工具之LVS 集群概念 将很多机器组织在一起,作为一个整体对外提供服务集群在扩展性、性能方面都可以做到很灵活集群分类 负载均衡集群:Load Balance高可用集群:High Availability高性能计算:High Performance Computing …...
vue3的getCurrentInstance获取当前组件实例
vue3的setup中没有this时需要使用getCurrentInstance()来获取。 在 Vue 3 中,getCurrentInstance 方法可以在组合式 API(Composition API)中获取当前组件实例。这个方法返回一个包含了组件实例的对象,你可以用它来访问组件的 pro…...
springcloud第4季 springcloud-alibaba之sentinel
一 sentinel介绍 1.1 sentinel作用 sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。 1.2 组成部分 sen…...