数据结构期末复习第六章树和二叉树
数据结构期末复习第六章树和二叉树
知识点:
先序遍历二叉树规则:根-左-右
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个无右邻兄弟的结点。
它们在转换得到的二叉树中右链域为空,而其他结点的右链域非空。