【数据结构功法】第八话 · 树与二叉树的基本概念

目录

🍺知识点9:树的概念与性质

🍯9.1 树的逻辑结构与性质

🍊1.树的逻辑结构

🍊2.树的相关术语

🍊3.树的性质

📜习题检测

🍯9.2 二叉树的的定义与性质

🍊1.二叉树的定义

🍊2.特殊的二叉树

🍊3.二叉树的性质

📜习题检测

🍯9.3 树的存储结构

🍊1.顺序存储

🍊2.链式存储

🍺知识点9:树的概念与性质


🍯9.1 树的逻辑结构与性质


🍊1.树的逻辑结构

通俗来讲,树的逻辑结构就像是一棵树,有一个树根,从这个树根分叉出很多树枝,而在这些树枝的边缘长了许多茂密的叶子,这一切就是“树”这种逻辑结构的组成。

树的官方定义是这么说的:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合;当n=0时,为空树,当n>0时,为非空树。任意一棵非空树都满足:

  1. 有且仅有一个被称为根的结点(如下图的结点A就是根结点)。
  2. 除根结点外的其余结点可分为m(m>0)个互不相交的有限集T1、T2、···、Tm,其中每个集合本身又是一棵树,称为根的子树;如下图B、C、D是根结点A的子树。

01.树最适合用来表示( )的数据。
A. 有序
B. 无序
C. 任意元素之间具有多种联系
D. 元素之间具有分支层次关系

🍊详细题解:

本题考察的其实是树的逻辑结构,树是一种分层结构,适合表示那些具有层次关系的元素结构。具有如下特点:

  • 树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。
  • 树中所有结点可以有零个或多个后继。

但需要注意的是,并不能表示任意元素间的多种关系,即不能表示一个结点有多个前驱这种情形,这是“图”的数据结构。

✅正确答案:D


🍊2.树的相关术语

对于上图关于树的逻辑结构,相关术语较多,因此我们在此进行了解:

  • 结点的度:一个结点含有的子树的个数;例如上图A结点的度为3,C结点的度为2,N结点的度为0。
  • 树的度:树中结点的最大度数;例如上图结点D的度为4,因此上图树的度为4。
  • 叶结点:度为0的结点称为叶结点;例如上图的N、O、P结点。
  • 分支结点:度不为0的结点;例如上图的A、B、C、D、E、J结点。
  • 父亲结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;如A是B、C、D的父亲结点。
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点;如上图的B、C、D结点互为兄弟结点。
  • 堂兄弟结点:父亲结点互为兄弟结点的结点;如上图G与H结点互为堂兄弟结点,因为它们的父结点分别为B和C,B和C互为兄弟结点。

  • 结点的层次:从根开始定义,根为第1层,根的子结点为第2层,以此类推;例如上图A结点为第1层,B结点为第2层,F结点为第3层,O结点为第4层。
  • 树的深度/高度:树中结点的最大层次;例如上图树的高度为4。
  • 路径:树中两个结点之间所经过的结点序列;例如上图中N到A的路径为N-E-B-A。

  • 路径长度:两个结点之间路径上经过的边数;例如上图N到A的路径长度为3,因此下面这道题应当选A。
03.树的路径长度是从树根到每个结点的路径长度的( )。
A. 总和
B. 最小值
C. 最大值
D. 平均值
  • 结点的祖先:从根到该结点所经分支上的所有结点;如N的祖先有E、B、A。
  • 子孙:结点的子树中的所有结点;例如上图中所有结点(除A自身以外)都是A的子孙,E的子孙是N、O。
  • 森林:由m棵不相交的树组成的集合。


🍊3.树的性质

关于树的性质,我们首先需要区分两个概念,那就是度为m的树m叉树的区别:

度为m的树

m叉树

任意结点的度 ≤ m 

任意结点的度 ≤ m 

至少有一个结点度 = m 

允许所有结点的度都 <= m

一定是非空树,至少有m+1个结点

可以是空树

在区分了度为m的树与m叉树的区别后,我们就可以进一步来介绍树的一些常见性质了。


性质1:结点数 = 总度数 + 1

证明:这是因为树中的所有结点的度数之和等于除了根结点的所有结点数之和,即+1加的是根结点。因此下面这道题应当选A。

02.一棵有n个结点的树的所有结点的度数之和为( )。
A. n-1
B. n
C. n+ 1
D. 2n
07.【2010统考真题】在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结
点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是( )
A. 41
B. 82
C. 113
D. 122

这道题也是应用上面的性质1求解,通过总度数与总结点数之间的关系构建方程,进而求解出度为0的结点个数(即叶结点的个数),其解法如下:


性质2:度为m的树中第i层上至多有m^{i-1}个结点(i\geq 1)。

证明:由于这里考察的是至多情况,因此度为m的树每一层都应该尽量排满,即第一层排1个结点,第2层排m个结点,第3层排m*m个结点,第四层排m*m*m个结点,以此类推。


性质3:高度为h的m叉树至多有(m^{h}-1)/(m-1)个结点。

证明:这里是在性质2的基础上推导出来的,因为考虑m叉树总共至多的结点个数,因此每一层都应该排满,即最后是在求一个等比数列求和。


性质4:高度为h的m叉树至少有h个结点;高度为h,度为m的树至少有h+m-1个结点。

05.度为4、高度为h的树,( )。
A. 至少有h+3个结点
B. 至多有4h-1个结点
C. 至多有4h个结点
D. 至少有h+4个结点

由性质4我们知道,对于一个高度为h,度为4的树,其至少有h+4-1个结点,即h+3个结点,因此选A。

04.对于一棵具有n个结点、度为4的树来说,( )。
A. 树的高度至多是n-3
B. 树的高度至多是n-4
C. 第i层上至多有4(i-1)个结点
D. 至少在某一层上正好有4个结点

对于A、B选项:这道题其实是性质4的变形考法,由于度为4的树要求该树一定包含至少一个度为4的点,因此,想要让这个树的高度越高,就必须让该树只存在一个度为4的点,通过下图的计算,应当选A。


性质5:具有n个结点的m叉树的最小高度为[log_{m}(n(m-1)+1)]

证明:由于我们这里求的是具有n个结点的最小高度,因此该m叉树的每一层也应当排满,假设具有n个结点的m叉树的最小高度为h,那么n一定小于等于h层全排满的情况,n也一定大于h-1层全排满的情况,这时我们就得到了一个等式,进行求解。

1

1

1

1

06.假定一棵度为3的树中,结点数为50,则其最小高度为( )。
17.假定一棵三叉树的结点数为50,则它的最小高度为( ).
A. 3
B. 4
C. 5
D. 6

解:上面两问的本质相同,要想让树的高度最小,就尽量将每一层都排满。

📜习题检测


01.含有n个结点的三叉树的最小高度是多少?

由于此处求的是最小高度,因此三叉树的每一层都需要排满,这里其实可以直接套用上面的性质5直接得出结果,这里的m=3,由上面结论得其最小高度应当为:log_{3}[n(3-1)+1]=log_{3}[2n+1],但是在这里还是再证明一下下吧!

02.已知一棵度为4的树中,度为0,1,2,3的结点数分别为14,4,3,2,求该树的结点总数n
和度为4的结点个数,并给出推导过程。

03.已知一棵度为m的树中,有n1个度为1的结点,有n2个度为2的结点……有nm个度为
m的结点,问该树有多少个叶子结点?

这道题其实和上一道题本质相同,都是应用【性质1:总度数+1=总结点数】来构造方程,其相关解法过程如下:

到这里,我们已经初步掌握了有关于树的逻辑结构与性质,接下来我们会再进一步专注于研究m=2时的二叉树的定义和相关性质 

🍯9.2 二叉树的的定义与性质


🍊1.二叉树的定义

二叉树是n个结点的有限集合,每个结点至多只有两棵子树,即二叉树中不存在度大于2的结点,其特点有:

  1.  
  2. n≥0时,每个结点最多有两棵子树,且左右不能颠倒,分别为左子树和右子树。

值得注意的是二叉树是有序树,左右子树如果颠倒就会变成一棵完全不同的二叉树,因此即使树中结点只有一棵子树,也要区分它是左子树还是右子树。下图罗列了二叉树的5种基本形态,所有的二叉树都是由下面这五种基本形态组合而成的。


🍊2.特殊的二叉树

(1) 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是2^{k}-1 ,则它就是满二叉树。

(2)完全二叉树:高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。

Q1:什么样的二叉树不算是完全二叉树呢?

A1:例如下图,左侧的这棵二叉树前3层同满二叉树一样,但最后一层没有排满,但元素的编号同满二叉树的元素顺序相同;而右侧的这棵二叉树虽然前3层同满二叉树一样,但是第三层中的元素并没有按满二叉树的顺序排列,13结点之前空出了一个12结点的位置。

22.【2018统考真题】设一棵非空完全二叉树T的所有叶结点均位于同一层,且每个非叶结
点都有2个子结点,若T有k个叶结点,则T的结点总数是( )。
A. 2k-1
B. 2k
C. k^2
D. 2^k-1

(3)二叉排序树:左子树上所有结点的关键字均小于根结点的关键字,右子树上所有结点的关键字均大于根结点的关键字,同时左右子树各是一棵二叉排序树。

(4)平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1,这会使得它具有更高的搜索效率;比如在下图中我们要找到70这个结点,我们使用平衡二叉树只需要走两步即可找到,而在非平衡二叉树中需要走6步。


🍊3.二叉树的性质

性质1:非空二叉树上的叶子结点数等于度为2的结点数加1,n_{0}=n_{2}+1

证明:这个性质的证明我们需要结合之前提到的树的【性质1:结点数=总度数+1】,具体证明过程如下图所示:

03.具有10个叶子结点的二叉树中有( )个度为2的结点。
A. 8
B. 9
C. 10
D. 11

解:由上述的性质1可得,叶子结点个数减1就是度为2的结点个数,因此选B。

06.设二叉树有2n个结点,且m<n,则不可能存在()的结点。
A. n个度为0
B. 2m个度为0
C. 2m个度为1
D. 2m个度为2

21.【2011统考真题】若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是( ).
A. 257
B. 258
C. 384
D. 385

解:性质1十分实用,有时可以大大缩短解题步骤与时间,比如该题我们在法二中运用了性质1,可以快速求解。


性质2:非空二叉树上第k层上至多有2^{k-1}个结点(k\geqslant 1)

证明:这个性质比较好理解,非空二叉树想要在第K层上有最多的结点,就需要前K-1层每一层都排满,这样才可以达到在第k层存在最多的结点。

11.若一棵深度为6的完全二叉树的第6层有3个叶子结点,则该二叉树共有( )个叶子
结点。
A. 17
B. 18
C. 19
D. 20

解:由于该二叉树是完全二叉树,因此说明前5层都排满了,第五层有2^{5-1}个结点,由于第六层只有3个叶子结点,说明第5层有2个度不为0的结点,14个叶子结点,该二叉树总计14+3个叶子结点,因此选A。


性质3:高度为h的非空二叉树至多有2^{h}-1个结点(h\geq 1)

证明:这个性质其实也可以用树的总体性质推导得出,由于高度为h的m叉树最多有(m^h-1)/(m-1)个结点,将m=2代入,就可以得到该结论了。

04.设高度为h的二叉树上只有度为О和度为2的结点,则此类二叉树中所包含的结点数至少为( )。
A. h
B. 2h-1
C. 2h+1 
D. h+1

解:这题其实并不应用该性质,但这是这道题的反向出法,求二叉树的最少结点个数,由于这题中强调了只存在度为0和度为2的结点,因此我们可以初步确定该二叉树的结构如下图所示,接下来我们就可以通过找规律确定公式,因此本题选B。

08.设二叉树只有度为0和2的结点,其结点个数为15,则该二叉树的最大深度为( )。
A. 4
B. 5
C. 8
D. 9

解:这题其实就是上面这题的变式,可以通过画图的方式解决这道题,然后归纳出一个公式,最后通过求解可得本题答案为C。

09.高度为h的完全二叉树最少有( )个结点。
A. 2^h
B. 2^h+1
C. 2^(h-1)
D. 2^h-1

解:由于本题求的是完全二叉树的最少结点,因此当它的最后一层只排1个结点时,它就有了最少的结点数,因此我们可以用上述性质计算出前h-1层的二叉树的结点个数,然后加上最后一层的一个结点,因此选C。

10.已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则完全二叉树的结点个
数最少是( )。
A. 39
B. 52
c. 111
D. 119

解:由于求完全二叉树结点的最少个数,因此说明第6层的叶结点位于二叉树的最后一层,前5层同满二叉树完全相同,因此前5层总共有2^{5}-1个结点,加上第6层的8个叶结点,最终应当是31+8=39个结点。

20.【2009统考真题】已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该
完全二叉树的结点个数最多是( ).
A. 39
B. 52
C. 111
D. 119

解:这一题明显和上面一题恰好相反,求的是该完全二叉树的最多结点个数,因此第6层的叶结点就应当考虑为二叉树倒数第二层遗留下来的,这时我们求出第6层有2^{6-1}个结点,其中有32-8个结点都应当是度为2的结点,这就导致第7层有24*2个结点。最终计算二叉树的总结点个数:2^6-1+24*2=63+48=111个结点,因此选C。


性质4.1:具有n个(n>0)结点的完全二叉树的高度为[log_{2}(n+1)]

证明:这个结论我们同样可以通过树的总体性质公式推导,我们知道对于具有n个结点的m叉树的最小高度为[log_{2}(n(m-1)+1)],将m=2代入即可得出上面的结论。

05.假设一棵二叉树的结点个数为50,则它的最小高度是( )。
A. 4
B. 5
C. 6
D. 7

解:对于这道题求二叉树的最小高度,那就说明二叉树每一层都应当尽量排满,即可以使用求满二叉树高度的公式,此时n=50,h=log_{2}(50+1)=5.?,然后向上取整,最后得到h=6,因此选C。

12.一棵完全二叉树上有1001个结点,其中叶结点的个数是( )。
A. 250
B. 500
C. 254
D. 501

解:对于本题我们首先应当计算出树的高度,然后计算出最后一层的结点个数与倒数第二层的结点个数,最后将这两层的叶子结点个数相加就可以得出答案,因此选D。


性质4.2:具有n个(n>0)结点的完全二叉树的高度为\left \lfloor log_{2}n \right \rfloor+1

证明:为什么称这个性质为4.2呢,是因为这是性质4.1的变式,我们在推导过程中修改了等式比较中的上下限。假设n个结点的二叉树高度为h,那么该二叉树的结点个数一定大于等于h-1层前的所有结点数之和+1,也一定小于排满h层的结点数之和+1,于是我们可以这么证明:

16,在一棵完全二叉树中,其根的序号为1,( )可判定序号为p和q的两个结点是否在同一层。
A. log2(q)↓=log2(p)↓
B. log2(q)=log2(p)
c. log2(p)↓+ 1 = log2(q)↓
D. log2(q)↓+ 1 = log2(p)↓

解:这道题可以直接秒杀,因为可以直接运用上述的性质4.2,这是因为若p、q位于同一层,一定会有\left \lfloor log_{2}p \right \rfloor+1=\left \lfloor log_{2}q \right \rfloor+1,两边同时消去1就得到了答案,因此选A。

07.一个具有1025个结点的二叉树的高h为( )。
A. 11
B. 10
c. 11~1025
D. 10~1024

📜习题检测


01.下列关于二叉树的说法中,正确的是()。
A. 度为2的有序树就是二叉树
B. 含有n个结点的二叉树的高度为log2(n) + 1
c. 在完全二叉树中,若一个结点没有左孩子,则它必是叶结点
D. 在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二叉排序树与删除前原二叉排序树相同

解:本题选项涉及的知识点较为广泛,因此进行逐一分析如下:

  • A选项:在二叉树中,若某个结点只有一个孩子,则这个孩子的左右次序是确定的,但在度为2的有序树中,若某个结点只有一个孩子,则这个孩子就无须区分其左右次序;
  • B选项:该公式适用于完全二叉树高度的计算,并不适用于所有的二叉树;
  • C选项:根据完全二叉树的定义,在完全二叉树中,若有度为1的结点,则该结点只可能有左孩子而无右孩子,因此C选项正确;
  • D选项:在二叉排序树中插入结点时插在叶结点的位置,此时若删除的结点为分支结点,会导致二叉排序树重构,其结构将会发生改变。

02.以下说法中,正确的是().
A. 在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点
B. 任何一棵二叉树,叶子结点个数为度为2的结点数减1,即n0=n2-1
C. 完全二叉树不适合顺序存储结构,只有满二叉树适合顺序存储结构
D. 结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子的编号为2i

122


18.已知一棵有2011个结点的树,其叶结点个数是116,该树对应的二叉树中无右孩子的结
点个数是( )。
A. 115
B. 116
C. 1895
D. 1896

解:本题的本质考察的是将树转换为二叉树,需要掌握树转换为二叉树的规则——【左孩子右兄弟法】,即左子树为当前结点的孩子结点,右子树为当前结点的兄弟结点,具体分析见下图,答案选D。


13.若一棵二叉树有126个结点,在第7层(根结点在第1层)至多有( )个结点。
A. 32
B. 64
C. 63
D. 不存在第7层

解:要使得第7层的结点数最多,该二叉树只考虑高度为7的情况,通过计算我们得道7层满二叉树共127个结点,126只比127少1个结点,说明第7层少了一个结点,第7层排满时有2^{7-1}个结点,因此第7层最终至多只有63个结点,因此选C。


14.一棵有124个叶子结点的完全二叉树,最多有( )个结点。
A. 247
B. 248
C. 249
D. 250

解:本题提前告知了完全二叉树的叶子结点的个数,因为要求最多的结点个数,因此我们考虑叶子结点产生于最后一层,只有个别叶子结点产生于倒数第二层,通过下图计算,因此选B。

当然这道题其实有更加简便的方法,只需要应用二叉树的性质1就可以求解。


19.对于一棵满二叉树,共有n个结点和m个叶子结点,高度为h、则( ).
A. n=h+m
B. n+m=2h
C. m=h-1
D. n=2^h-1


01.在一棵完全二叉树中,含有n0个叶子结点,当度为1的结点数为1时,该树的高度是多少?
当度为1的结点数为0时,该树的高度是多少?


02.一棵有n个结点的满二叉树有多少个分支结点和多少个叶子结点?该满二叉树的高度是多少?

解:关于这道题目,我们可以直接运用性质1求解,因为我们知道满二叉树是不存在度为1的结点的,因此结点总数n=n_{0}+n_{2}=2n_{0}-1,因此可以直接求得n_{0}=\frac{n+1}{2}n_2=\frac{n-1}{2};当然我们也可以采取另一种方法,因为是满二叉树,因此可以精确计算出它的高度,然后我们可以直接用公式求最后一层的叶结点个数,而后运用性质1得到分支结点个数。


03.已知完全二叉树的第9层有240个结点,则整个完全二叉树有多少个结点?有多少个叶子结点?

✨✨✨我是分割线✨✨✨

🍯9.3 树的存储结构


🍊1.顺序存储

顺序存储采用一组地址连续的存储单元,自上而下、从左到右存储完全二叉树上的节点元素,将完全二叉树上编号为 的结点元素存储在一维数组下标为 i-1 的分量中。

优点:这种顺序存储的方式比较适合满二叉树与完全二叉树的存储,因为树中结点的父子关系可与数组的下标相对应,可以节省存储空间(相比链式存储,需要存储除数据元素外的指针),同时又能利用数组元素的下标确定结点在二叉树中的位置。

缺点:不适用于非完全二叉树的存储,会产生空间的浪费;如上图右侧二叉树的顺序存储,数组中有很多空间都被浪费了。

重点:关于顺序存储,我们通常会考察结点序号与父子之间的逻辑关系,关于这一类的题型以及应用,我们将会通过学习“堆”这种数据结构来深入掌握!

23.【2020统考真题】对于任意一棵高度为5且有10个结点的二叉树,若采用顺序存储结构
保存,每个结点占1个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元
数量至少是( )。
A. 31
B. 16
C. 15
D. 10

解:对于一棵高度为 h 的二叉树,为了满足任意性,至少需要开2^{h}-1个存储单元,此处h=5,因此至少需要开31个存储单元。通过这道题也再次证实了,二叉树的顺序存储结构只适合存储完全二叉树,对于本题的树来说,太浪费存储空间了!


🍊2.链式存储

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中 每个结点由三个域组成,数据域和左右指针域 ,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。其中,链式结构又分为二叉链和三叉链,其结构一般如下图所示。

对此,我们简要定义一下二叉链表与三叉链表的结点:
//二叉链表的定义
struct BinaryTreeNode{struct BinaryTreeNode* leftChild;  //指向当前结点的左孩子struct BinaryTreeNode* rightChild; //指向当前结点的右孩子DataType data; //存放当前结点的数据
};//三叉链表的定义
struct BinaryTreeNode {struct BinaryTreeNode* leftChild;  //指向当前结点的左孩子struct BinaryTreeNode* rightChild; //指向当前结点的右孩子struct BinaryTreeNode* parent;     //指向当前结点的父亲结点DataType data; //存放当前结点的数据
};
15.一棵有n个结点的二叉树采用二叉链存储结点,其中空指针数为( )。
A. n
B. n+l
C. n-l
D. 2n

解:二叉链表中的一个指针代表一个分支,n个结点中,除去根结点以外共有n-1个结点,应当有n-1个分支,然而每个结点都有2个指针域,n个结点共有2n个指针域,因此空指针的数量=2n-(n-1)=n+1,即n个结点的二叉链表具有n+1个空链域。

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

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

相关文章

uni——不规则tab切换(skew)

案例展示 案例代码 <!-- 切换栏 --> <view class"tabBoxs"><view class"tabBox"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem":class"current item.id&…

14.3.6 【Linux】LVM 相关指令汇整与 LVM 的关闭

至于文件系统阶段 &#xff08;filesystem 的格式化处理&#xff09; 部分&#xff0c;还需要以 xfsgrowfs 来修订文件系统实际的大小才行。至于虽然 LVM 可以弹性的管理你的磁盘容量&#xff0c;但是要注意&#xff0c;如果你想要使用 LVM 管理您的硬盘时&#xff0c;那么在安…

记录问题: servlet获取项目包绝对路径

【2023-8-8 23:46:27 星期二】 如何获取在webapp下的路径?而不是target包下的webapp目录 比如这里应该获取到 F:\Tiam\Desktop\freemarker\freemarker-demo01\src\main\webapp 而readPath总是获取到 F:\Tiam\Desktop\freemarker\freemarker-demo01\target\freemarker-demo0…

【C++进阶之路】继承与多态的概念考察

文章目录 一、问答题二、概念题三、答案与解析问答题概念题 一、问答题 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f;什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性的。继承和组合的区别&#xff1f;什么时候用继承&#xff1f;什么时候用组合&…

Python 调用自定义函数

新手入坑。 通常我们需要把公共函数提出来&#xff0c;作为公共资源调用。也避免了代码的重复书写。 比如我们在项目内创建我们的py脚本路径如下&#xff1a; 在公共方法中定义方法&#xff1a; class CommonMethods:def dataFormat(df):dataList []for row in range(0, df.…

linux umask 详解

1. umask 定义 在 linux 系统中&#xff0c;umask 被定义在 /etc/profile 配置文件中&#xff0c;有一段 shell 脚本对 umask 是这么定义的。在 shell 会话输入命令&#xff1a; $ cat /etc/profile # 查看 /etc/profile 配置文件的内容 if [ $UID -gt 199 ] &&…

ADC模拟看门狗

如果被ADC转换的模拟电压低于低阀值或高于高阀值&#xff0c;AWD模拟看门狗状态位被设置。阀值位 于ADC_HTR和ADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE位 以允许产生相应中断。通过以下函数可以进行配置 void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx…

Attacks in NLP

一、 Introduction NLP对抗攻击是人工智能对抗攻击的一个重要的组成部分&#xff0c;但是最近几年才逐渐开始兴起&#xff0c;究其原因在于NLP对抗攻击与传统computer vision或者audio对抗攻击有很大的不同&#xff0c;主要在于值空间的连续性&#xff08;CV、audio&#xff0…

Java中实现图片和Base64的互相转化

文章目录 前言一、代码二、测试三、结果 前言 公司项目中用到了实名认证此&#xff0c;采用的第三方平台。后端中用到的单项功能为身份证信息人像对比功能&#xff0c;在写demo的过程中发现&#xff0c;它们所要求的图片信息为base64编码格式。 一、代码 package com.bajiao…

C++笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究

C笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究 code review! 文章目录 C笔记之两个类的实例之间传递参数——通过构造函数传递类对象的方法详细探究1.传递对象的const引用——ClassB的实例只能访问ClassA的实例&#xff0c;但不会修改ClassA的实…

Echart(v5)实现中国地图区域图

一、需求背景 需要实现一个中国地图的区域图&#xff08;区域级别到市&#xff09;&#xff0c;并且指定区域可以高亮。 二、相关工具 1、中国的GeoJSON数据获取&#xff1a;DataV.GeoAtlas地理小工具系列 2、Echart组件库 Apache ECharts 三、实现 echart配置&#xff1a; …

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link&#xff0c;使用QT编写程序&#xff0c;调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】 1、前言2、实验环境3、先前了解-自我总结4、实验过程&#xff08;0&#xff09;硬件连接与供电&#xff08;1&#xff09;安装&使用STM32 ST-LINK Utility&#xff0…