数据结构常见题型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构常见解答题
1:二叉树性质3的证明 二叉树性质3::对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0 = n2+1。
证明:设二叉树中结点总数为n ,n1为二叉树中度为1的结点数。则n=n0+n1+n2(1) 设二叉树中分支数目为B ,因为二叉树中的分支都是由度为1和度为2的结点发出,所以分支数目为:B=n1+2n2(2)
因为除根结点外,每个结点均对应一个进入它的分支,所以有:n=B+1。(3) 将(1)(2)代入(3)中,得n0+n1+n2=n1+2n2+1,整理后得n0=n2+1,故结论成立。 2:已知二叉树先序遍历序列和中序遍历序列画出二叉树(或是已知后序和中序) 例如
已知一棵二叉树的先序序列为A B C D E F G H I
中序序列为:B C A E D G H F I
试画出二叉树。
先序遍历是根左右,中序是左根右。
做法:先确定根结点,然后确定左子树的结点,和右子树结点,画出左右子树。
首先,由先序序列可知,结点A 是二叉树的根结点。其次,根据中序序列,在A 之前的所有结点都是根结点左子树的结点,在A 之后的所有结点都是根结点右子树的结点,由此得到图(a)所示的状态。然后,再对左子树进行分解,得知B 是左子树的根结点,又从中序序列知道,B 的左子树为空,B 的右子树只有一个结点C 。接着对A 的右子树进行分解,得知A 的右子树的根结点为D ;而结点D 把其余结点分成两部分,即左子树为E ,右子树为F 、G 、H 、I ,如图(b)所示。接下去的工作就是按上述原则对D 的右子树继续分解下去,最后得到如图(c)的整棵二叉树。
(a)
3:线索二叉树:
对下图所示的二叉树进行线索化。
将没有左孩子的结点用虚线指向遍历序列的前驱,将没有右孩子的结点用虚线指向遍历序列的后继。
中序线索与后序线索类似
4
转化的二叉树记住左是孩子,右是兄弟。
森林转换为二叉树
森林转换为二叉树的方法如下:
(1)将森林中的每棵树转换成相应的二叉树。
(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时所得到的二叉树就是由森林转换
(a) 一个森林
(b) 森林中每棵树转换为二叉树(c) 所有二叉树连接后的二叉树
5:赫夫曼树构造及赫夫曼编码 赫夫曼树构造:(1)由给定的n 个权值{W1,W2,…,Wn}构造n 棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F ={T1,T2,…,Tn};
(2)在F 中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和;
(3)在集合F 中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F 中;(4)重复(2)(3)两步,直到F 中只剩下一棵二叉树时,这棵二叉树就是赫夫曼树。 例如: 假定用于通讯的电文仅有8个字母C1,C2,…,C8组成,各个字母在电文中出现的频率分别为5,25,3,6,10,11,36,4,试画出赫夫曼树并进行对这8个字母设计赫夫曼编码。
虽然赫夫曼树的带权
本题中各字母编码如下:c1:0110 c2:10 c3:0010 c4:0111 c5:000 c6:010 c7:11 c8:0011 6:邻接矩阵 所谓邻接矩阵(Adjacency Matrix )的存储结构, 就是用一维数组存储图中顶点的信息, 用矩阵表示图中各顶点之间的邻接关系。 假设图G =(V ,E )有n 个确定的顶点, 即V ={v 0,v 1,…,v n-1},则表示G 中各顶点相邻关系为一个n ×n 的矩阵,矩阵的元素为: A[i][j]=
若G 是网图,则邻接矩阵可定义为: A[i][j]=
其中,w ij 表示边(v i ,v j )或
例:
0 1 0 1
A = 1 0 1 1 0 1 0 0
1 1 0 0
一个无向图的邻接矩阵表示
∞ 9 6 3 ∞ 9 ∞ 4 5 ∞
A = 6 4 ∞ ∞ 7 3 5 ∞ ∞ 8 ∞ ∞ 7 8 ∞
一个网图的邻接矩阵表示
{ 1 若(v i ,v j )或
0 若(v i ,v j )或
{
w ij 若(v i ,v j )或
0或∞ 若(v i ,v j )或
c c 8 c 1
c
7
7:邻接表
给出上图无向图对应的邻接表表示。
vertex firstedge
图的邻接表表示
例如有向图
邻接表和逆邻接表为:
(a) 邻接表(b) 逆邻接表
8:已知有向图或无向图,给出深度优先遍历序列或广度优先遍历序列(生成树)
遍历序列要知道两点:初始点和存储结构,特别采用邻接表的存储结构表结点的顺序不同,得到的遍历序列可能不同。深度优先搜索可从图中某个顶点发v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
以上图为例,进行图的深度优先搜索。假设从顶点v1出发进行搜索,邻接点的顺序由小到大排列。在访问了顶点v1之后,找到第一个邻接点v2。因为v2未曾访问,则从v2出发进行搜索。依次类推,接着从v4 、v8 、v5 出发进行搜索。在访问了v5之后,由于v5