数据结构期末复习第六章树和二叉树

知识点:

先序遍历二叉树规则:根-左-右

1.访问根结点

2.先序遍历左子树

3.先序遍历右子树

中序遍历二叉树规则:左-根-右

1.先中序遍历左子树

2.再访问根节点

3.最后访问中序遍历右子树

后序遍历二叉树规则:左-右-根

1.后序遍历左子树

2.后序遍历右子树

3.访问根结点

1.  一棵二叉树的先序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历结果为(A)
A. CBEFDA                       B. FEDCBA
C. CBEDFA                       D.  不确定

解析:

先序遍历二叉树规则:根-左-右

1.访问根结点

2.先序遍历左子树

3.先序遍历右子树

二叉树的先序遍历结果为ABCDEF,先访问根结点,所以可以推测出A是根结点。

中序遍历二叉树规则:左-根-右

1.先中序遍历左子树

2.再访问根节点

3.最后访问中序遍历右子树

中序遍历结果为CBAEDF,所以可以推测出:

以A为界,CB为左子树部分,EDF为右子树部分。

同上,推测左子树和右子树后可以得出该二叉树为:

后序遍历二叉树规则:左-右-根

1.后序遍历左子树

2.后序遍历右子树

3.访问根结点

因此,该二叉树后序序列为:CBEFDA,故选A
2.  某二叉树的后序遍历序列为dabec,中序遍历序列为debac,则先序遍历序列为( D  )。
A .acbed                           B .decab       
C .deabc                           D .cedba

解析:

后序遍历二叉树规则:左-右-根

1.后序遍历左子树

2.后序遍历右子树

3.访问根结点

二叉树的后序遍历序列为dabec,可推测出c为根结点。

中序遍历二叉树规则:左-根-右

1.先中序遍历左子树

2.再访问根节点

3.最后访问中序遍历右子树

中序遍历序列为debac可推测出以c为界,左边为左子树,右边为右子树,该二叉树可以推测出没有右子树。

方法同上,递归推测左子树,可以最终推测出该二叉树为:

先序遍历二叉树规则:根-左-右

1.访问根结点

2.先序遍历左子树

3.先序遍历右子树

因此该二叉树先序序列为:cedba,因此选D

3.  对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( C  )次序的遍历实现编号。
A .先序            B.  中序              C.  后序    D.  从根开始按层次遍历

解析:

根据题意要求,我们可以知道,编号大小关系为左孩子<右孩子<根结点,符合后序遍历的特点:左-右-根,因此选择C.
4.  二叉树的先序遍历和中序遍历如下: 先序遍历:EFHIGJK;中序遍历: HFIEJKG 。

该二叉树根的右子树的根是( C )
A .E                                B .F
C .G                               D .H

解析:

方法同题1和题2, 先序遍历:EFHIGJK可推测出根结点为E,中序遍历: HFIEJKG 可推测出,以E为界,HFI为左子树,JKG为右子树。

使用先序遍历推测左子树和右子树,可推测出该二叉树为:

因此该二叉树右子树的根为G, 故选 C
5.  某二叉树的先序和后序序列正好相反,则该二叉树一定是( B )的二叉树。
A.  空或只有一个结点
B .高度等于其结点数  
C .任一结点无左孩子
D .任一结点无右孩子

解析:

由于先序遍历是“根——左子树——右子树”,而后序遍历是“左子树 ——右子树——根”,

假设根是A,左子是B,右子是C。 其中A,B,C也是二叉树。

先序遍历就是 ABC 后序遍历就是 BCA 如果这两个遍历 “正好相反”, 必定 B为空或C为空

即该二叉树每层左、右子树只能有1个,也就是说二叉树一定是高度等于其结点数

所以, 标准答案应是: 任一结点都无左孩子或任一结点都无右孩子,选择B。
5*.某二叉树的先序和后序序列正好相反,则该二叉树一定是( C  )的二叉树。
A .所有的结点均无左孩子
B .所有的结点均无右孩子
C .只有一个叶子结点
D .是任意一棵二叉树

解析:

前序序列是“根左右”,后序序列是“左右根”,

若要这两个序列相反,只有单支树,

所以本题的A和B均对,但只是其中一种情况,单支树的特点是只有一个叶子结点,故C是最合适的,选C
6.  设n,m为一棵二叉树的两个结点,在中序遍历时,n在m前的条件是(  C  )
A. n 在m 的右方           B. n 是m 的祖先
C. n 在m 的左方           D. n 是m 的子孙

解析:

中序遍历时,先访问左子树,再访问根结点。n在m前,则n必须在m的左子树中。因此本题答案为C。

知识点:

结点:数据元素+若干指向子树的分支
结点的度:该结点所拥有的后继个数

度为0的结点的含义是:没有后继的结点,也就是叶子结点

度为2的结点的含义是:有两个后继的结点

树的度:树中所有结点的度的最大值
叶子结点:度为零的结点
分支结点:度大于零的结点
树的深度:树中结点所在的最大层次

对于任何的一颗二叉树,度为0的结点(就是叶子结点)总是比度为2的结点多一个

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

解析:

度的含义是:一个结点所拥有的后继个数

对于任何的一颗二叉树,度为0的结点(就是叶子结点)总是比度为2的结点多一个
因此 我们可以判断出 在一颗具有10个叶子结点的二叉树中,度为2的结点是9个
[这棵树共有10个叶子结点 比度为2的结点(有9个)多一个]
例如下图:


分析:是叶子结点的有:P Q R S J K L M N O 共10个
度为二的结点有:A B C D E F G H I 共九个.
8.树中所有结点的度的和等于所有结点数加( C )。
A .0                               B .1       
C .-1                             D .2

解析:

应该是C,-1。
结点的度相当于该结点拥有的子树的棵数,也即该结点拥有的孩子结点的数量。

而在树的所有结点中,只有根节点不能做孩子结点,因此结点的度和结点数差1

即:结点的度=结点数-1=结点数+(-1)
9.在线索化二叉树中,t所指结点没有左子树的充要条件是( B)
A .t->left=NULL
B.  t->ltag=1
C.  t->ltag=1 且t->left=NULL
D.  以上都不对

解析:

线索二叉树中某结点是否有左孩子,不能通过左指针域是否为空来判断,而要判断左标志是否为1。



知识点:

路    径由一结点到另一结点间的分支所构成。如:a->b a->b->e

路径长度路径上的分支数目,如:a→e的路径长度=2  a->c的路径长度=1

树的路径长度从树根到每一结点的路径长度之和。如:树的路径长度=10=2+2+2+2+1+1

带权路径长度树中所有叶子结点的带权路径长度之和。

树的带权路径长度树中所有叶子结点的带权路径长度之和。

赫 夫 曼 带权路径长度最小的二叉树。

10. 由权值为9、2、5、7的四个叶子构造一棵哈夫曼树,该树的带权路径长度为( C)
A .23             B. 37         C. 44              D. 46

解析:

赫夫曼树构造方法如下:

1.先从9、2、5、7中找出两个最小的,即2和5,构建一个二叉树。

2.从9、7*(2和5的和) 、7中选出两个最小的7*(2和5的和) 和7 构建二叉树:

3.从9、14中选出两个最小的9和14 构建二叉树:

3.求该树的带权路径长度:

WPL=2*3+5*3+7*2+9*1=44,故选C。

知识点:

二叉树性质1:在二叉树的第 i 层上至多有2i-1 个结点。(i≥1)

二叉树性质2:深度为 k 的二叉树上至多含 2k-1个结点(k≥1)

二叉树性质3:对任何一棵二叉树,若它含有n0个叶子结点、n2个度为 2 的结点,则必存在关系式:n0 = n2+1

11.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度( C  )
A .4              B .5           C .6             D .7

解析:

解法一:

易知,在三叉树的第i层上至多有3i-1个结点。(i≥1)

那么深度为k的三叉树的最多结点数为:3k-1个结点(k≥1)。

假设一棵深度为k满三叉树有n个结点,n=30+31+...+3(k-1)=1+((3k-1-1)/2) 个结点。

1+((3k-1-1)/2) ≤n<1+((3k-1)/2)

取以3为底的对数得k-1≤log3(2n-1)<k,

即log3(2n-1)<k≤1+log3(2n-1),又因为k为整数,所以:k=「log3(2n-1)」+1。

35=243,36=729,此题中,代入数值244便得k=6。

注:符号「x」表示不大于x的最大整数。

解法二:

************************************

下面这个规则自己发掘原创,不知是否正确。

星云定则一:有n个结点的完全三叉树的深度可以通过判断以3为底的指数范围来估测。

35=243,36=729,35=243<244<729=36,因此一棵有244个结点的完全三叉树的高度6

*************************************

12.一个具有1025个结点的二叉树的高h为( C  ).
A .11                               B .10   
C .11 至1025 之间           D .10 至1024 之间

解析:

一棵二叉树每层只有1个结点,则具有1025个结点的二叉树的最大高度为1025。

一个具有1025个结点的完全二叉树的高度为11。

这一个具有1025个结点的二叉树的高h为11至1025之间。

************************************

下面这个规则自己发掘原创,不知是否正确。

星云定则二:有n个结点的完全二叉树的深度可以通过判断以2为底的指数范围来估测。

参考数据:210=1024,211=2048,210=1024<1025<2048=211

************************************

13.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为N1,N2和N3。与森林F对应的二叉树根结点的右子树上的结点个数是( D  )。
A .N1                           B .N1+N2
C .N3                           D .N2+N3

解析:

因为森林的第一棵树对应于二叉树根节点及其左子树,

因此在本例中森林F对应的二叉树根节点的右子树,将由F的第二、第三棵树转换而来,其节点总数为N2+N3。

14.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1  则T中的叶子数为( D   )
A .5            B .6          C .7           D .8

解析:

根据树的基本概念可知:树的度为4,那么结点的最大度数应为4,那么所有结点的度最多只有0,1,2,3,4五种情况,

根据题意设叶子结点个数为x,则1(根结点+1*4+2*2+3+ 1+4*1=4+2+l+l+x,解得x=8.

根据给定的条件,在树中,各结点的分支总数为:4×1+2×2+1×3+4×1=15:

树中的总结点数为:15(各结点的分支总数)+1(根结 点)=16:

非叶子结点总数为:4+2+1+1=8。

因此,叶子结点数为16(总结点数)-8(非叶子结点总数)=8。因此,本题的正确答案为D
15.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是(  A  )
A .m-n               B .m-n-1    
C .n+1               D .条件不足,无法确定

解析:

根据二叉树与森林的对应关系,将森林F转换成对应二叉树B的规则如下:

若森林F为空,则二叉树B为空。

若森林F非空,则F中的第一棵树的根为二叉 树B的根;

第一棵树的左子树所构成的森林按规则转换成一个二叉树成为B的左子树,

森林F的其他树所构成的森林按本规则转换成一个二叉树成为B的右子树。

依此规则可知:二叉树B结点的个数减去其右子树的结点的个数就是森林F的第1棵树的结点的个数
16. 若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( B )
A .9            B .11         C .15       D .不确定

解析:

二叉树性质3:对任何一棵二叉树,若它含有n0个叶子结点、n2个度为 2 的结点,则必存在关系式:n0 = n2+1

本题中度为2的结点有10个,即n2=10,n0=n2+1=10+1=11,故选B。

17. 一棵完全二叉树上有1000个结点,其中叶子结点的个数是(  B  )
A. 250               B. 500               C.254
D.505                E.以上答案都不对

解析:

设二叉树的总结点数为n,叶子结点数为n0,度为1的结点数为n1,度为2的结点数为n2

二叉树性质3:对任何一棵二叉树,若它含有n0个叶子结点、n2个度为 2 的结点,则必存在关系式:n0 = n2+1

根据二叉树的性质 有:n0=n2+1,n=n0+n1+n2=n1+2n2+1,于是可得,n=n1+2n0-1,

由于在完全二叉树中,度为1的结点总数n1要么为0要么为1,此题中显然为 1,

这样才能保证等式两边都是偶数,因此1000=1+2n0-1,解得n0=500。
18.设给定权值总数有n个,其哈夫曼树的结点总数为( D   )
A .不确定       B .2n        C .2n+1       D .2n-1

解析:

第1次必定是2个叶子组成二叉树,产生1新结点,接下来有2种情况:
    1. 此新结点与原剩下的叶子再组成二叉树又产生1新结点,这样就只有第1次时由2个叶子产生1新结点,

以后每次由1叶子与新结点产生新结点,故n个叶子共有2n-1个结点。
   2. 剩下的叶子中又有2个叶子(比第1次产生的新结点权小)结合产生新结点,其它类似,

那么必然会由2个都是新结点再产生新结点,所以实际上数量与第1种一样,共有2n-1个。
18*有n个叶子的哈夫曼树的结点总数为( D   )
A .不确定       B .2n        C .2n+1       D .2n-1

解析:

哈夫曼树又称为最优二叉树,它的结点总数和二叉树相同为2n-1。
19.有关二叉树下列说法正确的是( B   )
A.二叉树的度为2
B.一棵二叉树的度可以小于2                                                                                 
C.二叉树中至少有一个结点的度为2
D.二叉树中任何一个结点的度都为2

解析:

二叉树具有如下两个特点:
①非空二叉树只有一个根结点。
②每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。

二叉树中结点的度小于或等于2,A选项错误。

度为0的树是一棵单结点树,也是一棵二叉树,选项C、D错误。
20.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有(  B  )结点
A.2h     B.2h-1        C.2h+1         D.h+1

解析:


21.一棵树高为K的完全二叉树至少有( C )个结点
A.2k –1                   B. 2k-1 –1
C. 2k-1                     D. 2k

解析:

至少有2k-1个结点,最多有2k-1个结点。

一棵高为k的完全二叉树,当第k层只有最左边一个结点时具有最少的结点。

根据二叉树的性质,第1层到第k-1层共有结点2k-1-1个,因此它至少有2k-1-1+1=2k-1个结点。
22. 对二叉树的结点从1 开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,

同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( C   ) 次序的遍历实现编号。
A .先序                 B.  中序
C.  后序                   D.  从根开始按层次遍历

解析:

根据题意要求,我们可以知道,编号大小关系为左孩子<右孩子<根结点,符合后序遍历的特点:左-右-根,因此选择C.

知识点:

树、森林的遍历和二叉树遍历的对应关系 ?

树         森林       二叉树

先根遍历   先序遍历    先序遍历

后根遍历   中序遍历    中序遍历

23. 树的后根遍历序列等同于该树对应的二叉树的(  B  ).
A.  先序序列                   B.  中序序列
C.  后序序列

解析:

树的后序遍历是指先依次后序遍历每棵子树,然后访问根结点。

当树用二叉树表示法(也叫孩子兄弟表示法)存储时,可以找到唯一的一棵二叉树与之对应,我们称这棵二叉树为该树对应的二叉树。

那么根据这个法则可知,树的后序遍历序列等同于该树对应的二叉树的中序遍历。

注意,对于树而言,没有中序遍历。
24.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用(  C  )遍历方法最合适。
A.前序     B.中序      C.后序      D.按层次

解析:

显然后序遍历比较合理。正常的逻辑应该就是:做好当前结点子树内部的交换,然后交换当前结点的左右子树。

刚好符合后序遍历的算法逻辑。
1. 交换好左子树
2. 交换好右子树
3. 交换左子树与右子树
其他算法如先序和按层次其逻辑都差不多,即访问当前结点时交换其左右子树。

从逻辑上来看稍显别扭一点点。因此说最合适应该是后序遍历,但是从实现上来说先序和按层次都是可以的。
1. 交换左子树与右子树
2. 遍历左子树
3. 遍历右子树
按层次遍历
1. 根结点入队列
2. 出队列,交换其左右子树,将子树的根入队列
3. 重复2直到队列为空
中序遍历相对较难实现一些。
25.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( B   )
A.都不相同          B.完全相同
C.先序和中序相同,而与后序不同 
D.中序和后序相同,而与先序不同

解析:

根据“根-左-右”,“左-根-右”,“左-右-根”的先序、中序、后序遍历原则,

可以知道,在3种遍历所产生的序列中,所有叶子结点的先后顺序是完全相同的。
26.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( C  )
A.X的双亲  
B.X的右子树中最左的结点  
C.X的左子树中最右结点  
D.X的左子树中最右叶结点

解析:

因为中序遍历的顺序为左中右,所以是x左子树中最右的结点
27. 引入二叉线索树的目的是(  A   )
A .加快查找结点的前驱或后继的速度   
B .为了能在二叉树中方便的进行插入与删除
C .为了能方便的找到双亲      
D .使二叉树的遍历结果唯一

解析:

引入二叉线索树的目的就是为了加快查找结点的前驱或后继的速度 。
28. n个结点的线索二叉树上含有的线索数为( C  )
A.2n      B.n-l       C.n+l         D.n

解析:

线索二叉树是利用空闲的子链域来存放某种遍历次序下的直接前驱结点或直接后继结点的地址的二叉树。

因为二叉树的每个结点有且仅有两个链域,则n个 结点的二叉树,有2n个子链域。

又因为除根结点之外,其他每个结点都有且仅有一个进入支,这样就共有n-1进入支;

而这n-1分支是由上一层的结点的子链 域发出的,

因此,2n个子链域中有,n-1个链域是指向子结点的,其他n+1个链域空闲看着。

经过线索化以后,这些原来空闲着的n+1个链域被用来指向前 驱或后继,即用来存放线索。

所以在n个结点的线索二叉链表中,有n+1个线索指针。
29.设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( C   )个。
A. n-1       B.n       C. n+1       D. n+2

解析:

将森林中各树的根视为兄弟,则最右边那棵树的根没有右邻兄弟;

森林中凡是没有右邻兄弟的结点在转换得到的二叉树中其右链域为空。

每个非叶结点必有一个最右边的孩子,n个非叶结点则有n个没有右邻兄弟的子结点,

加上最右边那棵树的根,就有n+1个无右邻兄弟的结点。

它们在转换得到的二叉树中右链域为空,而其他结点的右链域非空。

时间: 2024-10-24 05:47:30

数据结构期末复习第六章树和二叉树的相关文章

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j

数据结构学习之第7章 树和二叉树

数据结构学习之第7章 树和二叉树 0x7.1.1 树的基本概念 ?1.树的定义 ? 树是由n(n>=0)个结点(或元素)组成的有限集合(记为T) ? 如果n>0,这n个结点中有且仅有一个结点作为树的根结点,简称为根,其余结点可分为m(m>=0)个互不相交的有限集\[T_{1}T_{2}\cdots T_{m}\],其中每个子集又是一棵符合定义的子树,称为根结点的子树. 知识点:由树的定义我们可以看出来树的结构是递归的 ?2.树的逻辑表示法 ? 1.树形表示法 ? 2.文氏图表示法 ? 3

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出

《大话数据结构》笔记(6-2)--树:二叉树

代码实现: 第六章    树:二叉树 定义 特点 二叉树的五种基本形态: 1. 空二叉树 2. 只有一个根结点 3. 根结点只有左子树 4. 根结点只有右子树 5. 根结点基友左子树又有右子树 特殊二叉树 斜树 所有结点都只有左子树的二叉树叫做左斜树.所有结点都只有右子树的二叉树叫做右斜树. 这两者统称为斜树. 斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同. 其实线性表结构可以理解为树的一种极其特殊的表现形式. 满二叉树 在一棵二叉树中,如果所有分支结点都存在左子树

《数据结构与算法分析:C语言描述》复习——第四章“树”——AVL树

2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母.此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1.有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别.没有bad case是AVL树与普通的二叉搜索树的最大区别.为了实现平衡性质,我们需要记录每个节点的高度(或者平衡因子)来检测不平衡的情况.为了修正高度不平衡,需要用到“旋转”的方法,分为单旋转和双

《数据结构与算法分析:C语言描述》复习——第六章“排序”——冒泡排序

2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一. 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换.确保每一轮把最小的元素交换到前面去.这个过程好比水中的气泡向上飘,所以叫冒泡排序.代码非常简单,所以语言描述反而显得麻烦了. 实现: 1 // My implementation for bubble sort. 2 #include <iostream> 3 #include <vector&

数据结构期末复习(三)

数据结构期末复习(三) 数组的存储结构 二维数组的顺序存储结构分为以行序为主序的存储方式和以列序为主序的存储方式. 以行序为主的存储方式就是常规的先存第0行的每列,再存第一行的每列,以此类推.以列为主的存储方式同理. 对于三维数组来说,按下标从左到右的顺序存储.例如,设a[0][0][0]的地址为p,则对于数组a[m][n][r],a[i][j][k] = p + (i*n*r + j*r + k)*l; 稀疏矩阵 三元组顺序表 转置函数最简单的方法就是row和col对应的值交换,并且row和c

第五章 树和二叉树

上章回顾 单链表的基本操作,包括插入.删除以及查找 双向链表和循环链表的区别 [email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 第五章 第五章 树和二叉树 树和二叉树 [email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 预习检查 什么是二叉树 树的遍历有哪几种方式 树有哪些应用 [email pr

数据结构-王道2017-第4章 树与二叉树-树、森林

1.树的存储结构有多种,既可以采用顺序存储结构,也可以采用链式存储结构,都要求能唯一地反映出树中各结点之间的逻辑关系,三种常用的存储结构 1)双亲表示法 采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲节点在数组中的位置,根节点下标为0,其伪指针域为-1. #define MAX_TREE_SIZE 100 //树中最多结点数 typedef struct{ //树的结点定义 ElemType data; //数据元素 int parent; //双亲位置域 }PTNo