mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-06-17 07:27:12 +08:00
更新
This commit is contained in:
@@ -80,7 +80,7 @@ $C.$后序线索树
|
||||
|
||||
$D.$所有线索树
|
||||
|
||||
解:$C$。前序遍历(中左右)、中序遍历(左中右)的最后访问的节点都是左或右叶节点,叶节点是没有子树的,所以两个指针域空出来了,可以存放线索指针用于回溯。但是后序遍历(左右中),最后访问的是子树的根节点,子树根节点的两个指针域都指向子树了,所以不能空出来存放线索信息,只能借助栈存储。
|
||||
解:$C$。前序遍历(中左右)、中序遍历(左中右)的最后访问的结点都是左或右叶结点,叶结点是没有子树的,所以两个指针域空出来了,可以存放线索指针用于回溯。但是后序遍历(左右中),最后访问的是子树的根结点,子树根结点的两个指针域都指向子树了,所以不能空出来存放线索信息,只能借助栈存储。
|
||||
|
||||
#### 二叉树个数
|
||||
|
||||
@@ -108,7 +108,7 @@ $C.$后序遍历
|
||||
|
||||
$D.$层次遍历
|
||||
|
||||
解:$C$。首先无论是什么遍历方式都会是从左到右的顺序,所以最先找到的一定是左边的结点,最后找到的一定是右边的结点。$m$是$n$的祖先。先序遍历访问次序:左根右,当$n$在左边遍历时会找到$m$到$n$的路径,而当$n$在右边时,由于已经遍历完根节点和左子树,则根和左部分的结点没用了就会出栈(使用递归算法时函数数据由栈保存),则$m$就丢掉了,也就不能找到$m$到$n$的路径。同理中序遍历也是会丢掉根和左部分,若$n$在右边则会丢失路径。层次遍历每遍历都会丢掉根节点,所以也不能找到。而后序遍历最后遍历根结点,所以根结点会一直保留到子结点全部遍历完才会丢弃,则此时就能找到$n$到$m$的路径。
|
||||
解:$C$。首先无论是什么遍历方式都会是从左到右的顺序,所以最先找到的一定是左边的结点,最后找到的一定是右边的结点。$m$是$n$的祖先。先序遍历访问次序:左根右,当$n$在左边遍历时会找到$m$到$n$的路径,而当$n$在右边时,由于已经遍历完根结点和左子树,则根和左部分的结点没用了就会出栈(使用递归算法时函数数据由栈保存),则$m$就丢掉了,也就不能找到$m$到$n$的路径。同理中序遍历也是会丢掉根和左部分,若$n$在右边则会丢失路径。层次遍历每遍历都会丢掉根结点,所以也不能找到。而后序遍历最后遍历根结点,所以根结点会一直保留到子结点全部遍历完才会丢弃,则此时就能找到$n$到$m$的路径。
|
||||
|
||||
**例题** 若$X$是二叉中序线索树中一个有左孩子的结点,且$X$不为根,则$X$的前驱为()。
|
||||
|
||||
@@ -204,7 +204,25 @@ $D.n+2$
|
||||
|
||||
### 平衡二叉树
|
||||
|
||||
#### 结点数
|
||||
**例题** 在任意一棵非空平衡二叉树($AVL$树)$T_1$中,删除某结点$v$之后形成平衡二叉树$T_2$,再将$v$插入$T_2$,形成平衡二叉树$T_2$。下列关于$T_1$与$T_3$的叙述中,正确的是()。
|
||||
|
||||
Ⅰ.若$v$是$T$的叶结点,则$T_1$与$T_3$可能不相同
|
||||
|
||||
Ⅱ.若$v$不是$T$的叶结点,则$T_1$与$T_3$一定不相同
|
||||
|
||||
Ⅲ.若$v$不是$T$的叶结点,则$T_1$与$T_3$一定相同
|
||||
|
||||
$A.$仅Ⅰ
|
||||
|
||||
$B.$仅Ⅱ
|
||||
|
||||
$C.$仅Ⅰ、Ⅱ
|
||||
|
||||
$D.$仅Ⅰ、Ⅲ
|
||||
|
||||
解:$A$。在非空平衡二叉树中插入结点,在失去平衡调整前,一定插入在叶结点的位置。若删除的是$T_1$的叶结点,则删除后平衡二叉树不会失去平衡,即不会发生调整,再插入此结点得到的二叉平衡树$T_1$与$T_3$相同。若删除后平衡二叉树失去平衡而发生调整,再插入结点得到的二叉平衡树$T_1$与$T_3$可能不同,如一个平衡树的一个子树只有一个结点,删除这个结点则平衡树必然失衡,肯定会重新调整。Ⅰ正确。若$v$不是$T$的叶结点,则删除可能相同也可能不同。一般而言删除一个结点,然后重新加入是从叶子结点处加入,所以肯定不是在原来的根位置。但是如果删除会失衡,则会调整,所以可能会调整回原来的位置。
|
||||
|
||||
#### 深度
|
||||
|
||||
**例题** 含有$20$个结点的平衡二叉树的最大深度为()。
|
||||
|
||||
@@ -234,6 +252,8 @@ $D.3$
|
||||
|
||||
### 哈夫曼树
|
||||
|
||||
#### 编码字符数
|
||||
|
||||
**例题** 设哈夫曼编码的长度不超过$4$,若已对两个字符编码为$1$和$01$,则还最多可对()个字符编码。
|
||||
|
||||
$A.2$
|
||||
@@ -248,6 +268,8 @@ $D.5$
|
||||
|
||||
<!-- 若哈夫曼编码的长度只允许小于等于$4$,则哈夫曼树的高度最高是$5$,已知一个字符编码为$1$,另一个字符编码是$01$,这说明第二层和第三层各有一个叶子结点,为使得该树从第3层起能够对尽可能多的字符编码,余下的二叉树应该是满二叉树,底层可以有$4$个叶结点,最多可以再对$4$个字符编码。 -->
|
||||
|
||||
#### 结点数
|
||||
|
||||
**例题** 若度为$m$的哈夫曼树中,叶子结点个数为$n$,则非叶子结点的个数为()。
|
||||
|
||||
$A.n-1$
|
||||
@@ -260,20 +282,54 @@ $D.\lceil n/(m-1)\rceil-1$
|
||||
|
||||
解:$C$。一棵度为$m$的哈夫曼树应只有度为$0$和$m$的结点,设度为$m$的结点(叶子结点)有$n_m$个,度为$0$的结点有$n_0$个,又设结点总数为$n$,$n=n_0+n_m$。因有$n$个结点的哈夫曼树有$n-1$条分支,则根据总结点与度数关系的公式($n=n_1+2n_2+\cdots+mn_m+1$)得到$mn_m=n-1=n_m+n_0-1$,整理得$(m-1)n_m=n_0-1$,$n_m=(n-1)/(m-1)$。
|
||||
|
||||
**例题** 在任意一棵非空平衡二叉树($AVL$树)$T_1$中,删除某结点$v$之后形成平衡二叉树$T_2$,再将$v$插入$T_2$,形成平衡二叉树$T_2$。下列关于$T_1$与$T_3$的叙述中,正确的是()。
|
||||
#### 路径
|
||||
|
||||
Ⅰ.若$v$是$T$的叶结点,则$T_1$与$T_3$可能不相同
|
||||
**例题** 下列选项给出的是从根分别到达两个叶结点路径上的权值序列,属于同一棵哈夫曼树的是()。
|
||||
|
||||
Ⅱ.若$v$不是$T$的叶结点,则$T_1$与$T_3$一定不相同
|
||||
$A.24,10,5$和$24,10,7$
|
||||
|
||||
Ⅲ.若$v$不是$T$的叶结点,则$T_1$与$T_3$一定相同
|
||||
$B.24,10,5$和$24,12,7$
|
||||
|
||||
$A.$仅Ⅰ
|
||||
$C.24,10,10$和$24,14,11$
|
||||
|
||||
$B.$仅Ⅱ
|
||||
$D.24,10,5$和$24,14,6$
|
||||
|
||||
$C.$仅Ⅰ、Ⅱ
|
||||
解:$D$。首先根据两个叶子,以及访问到叶子的前一个结点,这个结点一定是叶子的父亲结点。再根据哈夫曼树的结点一定有兄弟,即不存在度为$1$的结点。因此可以知道兄弟的权值,这样,给定的一个序列就可以推出两个叶子,两个序列推出四个叶子,这样就可以根据是否选择最小的两个叶子结点组合在一起作为判据,决定这个序列是否成立了。
|
||||
|
||||
$D.$仅Ⅰ、Ⅲ
|
||||
对于$D$,第一组最后一个是叶子结点为$5$的权值,中间的是$10$,则另一个叶子结点权值是$10-5=5$。这里不能继续推出。然后看第二组最后一个是叶子结点的权值为$6$,则另一个叶子结点权值为$14-6=8$。所以可以构造哈夫曼树:
|
||||
|
||||
解:$A$。在非空平衡二叉树中插入结点,在失去平衡调整前,一定插入在叶结点的位置。若删除的是$T_1$的叶结点,则删除后平衡二叉树不会失去平衡,即不会发生调整,再插入此结点得到的二叉平衡树$T_1$与$T_3$相同。若删除后平衡二叉树失去平衡而发生调整,再插入结点得到的二叉平衡树$T_1$与$T_3$可能不同,如一个平衡树的一个子树只有一个结点,删除这个结点则平衡树必然失衡,肯定会重新调整。Ⅰ正确。若$v$不是$T$的叶结点,则删除可能相同也可能不同。一般而言删除一个结点,然后重新加入是从叶子结点处加入,所以肯定不是在原来的根位置。但是如果删除会失衡,则会调整,所以可能会调整回原来的位置。
|
||||
```txt
|
||||
24
|
||||
|
|
||||
------
|
||||
10 14
|
||||
| |
|
||||
--- ---
|
||||
| | | |
|
||||
5 5 6 8
|
||||
```
|
||||
|
||||
同理分析$A$,$24,10,5$和$24,10,7$两组的第二个权值相加为$20\neq24$,权值根本不相等不是哈夫曼树。
|
||||
|
||||
同理$B$,$24,10,5$和$24,12,7$第二个权值相加也不等于第一个值,所以也不对。
|
||||
|
||||
对于$C$,$24,10,10$和$24,14,11$数值相加都能对的上,计算两个叶子权值$10-10=0$、$14-11=3$。具体构造出哈夫曼树:
|
||||
|
||||
```txt
|
||||
24
|
||||
|
|
||||
-------
|
||||
10 14
|
||||
| |
|
||||
---- ----
|
||||
| | | |
|
||||
10 0 11 4
|
||||
```
|
||||
|
||||
看叶子节点的值,最小的是$0$和$4$,他们应该结合在一起,所以构造有问题。
|
||||
|
||||
### 并查集
|
||||
|
||||
**例题** 假设初始化$0\sim9$的并查集,按照$1-2$、$3-4$、$5-6$、$7-8$、8-9$、$1-8$、$0-5$、$1-9$的顺序进行查找和合并,求最后集合数量。
|
||||
|
||||
解:初始化时$0\sim9$一共十个集合。$1-2$时合并$\{1,2\}$。$3-4$时合并$\{3,4\}$、$5-6$时合并$\{5,6\}$、$7-8$时合并$\{7,8\}$、$8-9$时合并$\{7,8,9\}$、$1-8$时合并$\{1,2,7,8,9\}$、$0-5$时合并$\{0,5,6\}$、$1-9$时属于同一集合不用合并。最后为$\{0,5,6\}$、$\{1,2,7,8,9\}$、$\{3,4\}$,所以有三个。
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -18,8 +18,8 @@
|
||||
+ 有向图:若$E$是有向边(也称弧)的有限集合时,则图$G$为有向图。弧是顶点的有序对,记为$<v,w>$,其中$v$、$w$是顶点,$v$称为弧尾,$w$称为弧头,$<v,w>$称为从顶点$v$到顶点$w$的弧,也称$v$邻接到$w$,或$w$邻接自$v$。$<v,w>\neq<w,v>$。
|
||||
+ 简单图:不存在重复边,且不存在顶点到自身的边。一般的图默认是简单图。
|
||||
+ 多重图:图$G$中某两个结点之间的边数多于一条,又允许顶点通过同一条边与自己关联。
|
||||
+ 无向完全图:对于无向图$\vert E\vert\in[0,n(n-1)/2]$,无向图中任意两个顶点之间都存在边。
|
||||
+ 有向完全图:对于有向图$\vert E\vert\in[0,n(n-1)]$,有向图中任意两个顶点之间都存在方向相反的两条弧。
|
||||
+ 无向完全图:对于无向图$\vert E\vert\in[0,n(n-1)/2]$,无向图中任意两个顶点之间都存在边,即$\vert E\vert=n(n-1)/2$。
|
||||
+ 有向完全图:对于有向图$\vert E\vert\in[0,n(n-1)]$,有向图中任意两个顶点之间都存在方向相反的两条弧,即$\vert E\vert=n(n-1)$。
|
||||
+ 稀疏图:一般$\vert E\vert<\vert V\vert\log\vert V\vert$的图。
|
||||
+ 稠密图:一般$\vert E\vert>\vert V\vert\log\vert V\vert$的图。
|
||||
+ 树:不存在回路,且连通的无向图。
|
||||
@@ -27,11 +27,13 @@
|
||||
|
||||
### 顶点的度
|
||||
|
||||
对于无向图,顶点$v$的度是指依附于该顶点的边的条数,记为$TD(v)$。$\sum\limits_{i=1}^nTD(v_i)=2\vert E\vert$。
|
||||
对于无向图,顶点$v$的度是指依附于该顶点的边的条数,记为$TD(v)$。
|
||||
|
||||
对于具有$n$个顶点,$e$条边的无向图,$\sum\limits_{i=1}^nTD(v_i)=2e$,即无向图的全部顶点的度的和等于边数的两倍。
|
||||
对于具有$n$个顶点,$e$条边的无向图,$\sum\limits_{i=1}^nTD(v_i)=2\vert E\vert=2e$,即无向图的全部顶点的度的和等于边数的两倍。因为每条边都与两个顶点关联。
|
||||
|
||||
对于有向图,入度是指以顶点$v$为终点的有向边的条数,记为$ID(v)$;出度指以顶点$v$为起点的有向边的条数,记为$OD(v)$;顶点$v$的度就是其入度和出度之和,即$TD(v)=ID(v)+OD(v)$。$\sum\limits_{i=1}^nID(v_i)=\sum\limits_{i=1}^nOD(v_i)=\vert E\vert$。因为每条有向边都有一个起点和重点。
|
||||
对于有向图,入度是指以顶点$v$为终点的有向边的条数,记为$ID(v)$;出度指以顶点$v$为起点的有向边的条数,记为$OD(v)$;顶点$v$的度就是其入度和出度之和,即$TD(v)=ID(v)+OD(v)$。$\sum\limits_{i=1}^nID(v_i)=\sum\limits_{i=1}^nOD(v_i)=\vert E\vert$。因为每条有向边都有一个起点和终点。
|
||||
|
||||
有向树:一个顶点的入度为$0$,其他顶点入度均为$1$的有向图。
|
||||
|
||||
### 顶点的关系
|
||||
|
||||
@@ -47,20 +49,20 @@
|
||||
### 图的连通
|
||||
|
||||
+ 连通:在无向图中,若从顶点$v$到顶点$u$有路径存在,则称$uv$是连通的。
|
||||
+ 强连通:在有向图中,若从顶点$v$到顶点$u$和从顶点$u$到顶点$v$之间都有路径,则称强连通。
|
||||
+ 连通图:无向图中任意两个顶点之间都是连通的。对于$n$个顶点的无向图,若其是连通图,则最少需要$n-1$条边,若其是非连通图,则最多有$C_{n-1}^2$条边。
|
||||
+ 强连通图:有向图中任意两个顶点之间都是强连通的。对于$n$个顶点的有相同,若其是强连通图,则最少需要$n$条边来形成环路。
|
||||
+ 强连通:在有向图中,若从顶点$v$到顶点$u$和从顶点$u$到顶点$v$之间都有路径,则称$uv$是强连通。
|
||||
+ 连通图:无向图中任意两个顶点之间都是连通的。对于$n$个顶点的无向图,若其是连通图,则最少需要$n-1$条边,若其是非连通图,则最多有$C_{n-1}^2$条边($n-1$个顶点构成一个完全图)。
|
||||
+ 强连通图:有向图中任意两个顶点之间都是强连通的。对于$n$个顶点的有向图,若其是强连通图,则最少需要$n$条边来形成环路。
|
||||
+ 子图:设有两个图$G=(V,E)$和$G'=(V',E')$,若$V'$是$V$的子集,$E'$是$E$的子集,则$G'$是$G$的子图。
|
||||
+ 生成子图:若有满足$V(G')=V(G)$的子图$G'$,则$G'$是$G$的生成子图。
|
||||
+ 生成子图:若有满足$V(G')=V(G)$的子图$G'$,则$G'$是$G$的生成子图。(即子图包含所有顶点,但不一定包含所有的边)
|
||||
+ 连通分量:无向图$G$中的极大连通子图称为$G$的连通分量;对任何连通图而言,连通分量就是其自身。
|
||||
+ 强连通分量:有向图$G$中的极大连通子图称为$G$的强连通分量;对任何强连通图而言,强连通分量就是其自身。
|
||||
+ 极大连通子图:是图的连捅分量,要求连通子图包含其所有的边。
|
||||
+ 极小连通子图:要保持图连通也要让边数最小的子图。
|
||||
+ 生成树:包含连通图中全部顶点的一个极小连通子图。若图的顶点为$n$,则其生成树包含$n-1$条边,若去掉生成树的一条边则会变成非连通图,若加上一条边则会形成一个回路。
|
||||
+ 生成森林:在非连通图中,连通分量的生成树构成了非连通图的生成森林。
|
||||
|
||||
无向图研究连通性,有向图研究强连通性。
|
||||
|
||||
区分极大连通子图和极小连通子图。极大连通子图是无向图的连通分量,极大即要求该连通子图包含其所有的边;极小连通子图是既要保持图连通又要使得边数最少的子图。
|
||||
|
||||
### 图的权
|
||||
|
||||
+ 边的权:在一个图中,每条边都可以表上具有某种含义的数值,这就是该边的权值。
|
||||
|
||||
Reference in New Issue
Block a user