- 准备数据结构的期末考的复习篇
习题内容(红色划线的是做错过的题,要注意)
解析部分(题目的答案用了浅色字体,为了方便自测,看不清可以选中那部分查看)
关联内容【加粗中括号中的内容,包括一些我自己的记忆技巧或者一些我能想到的知识点】
一、二叉树的一些基础知识
- 二叉树们
1.满二叉树
主要就是除最底层外所有结点都有两个子结点,即一个k层的满二叉树的结点总数为(2^k)-1个。
2.完全二叉树
一个共有k层,第k层结点左连续,k-1层满结点的二叉树就是完全二叉树。
3.二叉排序树
一个结点为准,它的左孩子小于它,右孩子大于它。所有结点都满足这个规则的树就是二叉排序树。
4.最优二叉树(哈夫曼树)
每次取最小的两个结点结合成新树,其带权路径长度最小,这样的树就是最优二叉树。
5.*平衡二叉树
简单来说就是它左右子树的高度差绝对值不超过1.
二、练习题
1.由三个结点可以构造多少种二叉树( )
A. 2 B.3 C.4 D.5
解析:D.如下图:
2.已知一棵完全二叉树的第6层(设根为第1层)有8个叶子结点,则该完全二叉树的结点个数最多是( )。
A.39 B.52 C.111 D.119
解析:C.这里我自己第一次做的时候选了A,就是陷入思维定式,上来就把第6层当作最底层了,如果想要结点个数最多的话应该把6层当作倒数第二层。也就是第6层最右边的8个结点没有子结点,剩下24个子结点均有两个子结点,也就是:1+2+4+8+16+32+24*2=111.
3.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )。
A.250 B.500 C.254 D.501
解析:D.这个就找一下规律,我比较懒的背公式所以喜欢现推,其实完全二叉树的叶子结点个数就是:结点数/2 (有余1就多加一个)。1001/2=500……1,500+1=501.
4.一个具有1025个结点的二叉树的高h为( )。
A.11 B.10 C.11到1025之间 D.10到1024之间
解析:C. AB挺好排除的就不说了,然后就是算出最矮的树多高,那就是往完全二叉树想,2^10=1024,多一个到11层,所以最矮h=11。1025就每层一个结点,最简单就全放左边。
5.深度为h的满m叉树的第k层有( )个结点(1<=k<=h)。
A.m^(k-1) B.m^k-1 C.m^(h-1) D.m^h-1
解析: A.第k层的结点不可能跟总体深度有关CD直接pass,最简单的就是带进去算两层就很明显了。
6.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,且左孩子的编号小于其右孩子的编号,可采用( )遍历实现编号。
A. 先序 B. 中序 C. 后序 D.从根结点开始层次遍历
解析:C.题目可知左孩子<右孩子<根,则遍历顺序是左右根,明显是后序遍历。
【这边一个记忆现中后序的小技巧,这里的先中后都是形容根的位置,左右孩子都是先左再右不变。也就是先序:根左右;中序:左根右;后序:左右根。层次遍历就是一层一层进行,每层从左到右,跟我们阅读的顺序一样。】
7.在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点个数是( )。
A.41 B.82 C.113 D.122
解析:B. 这个其实稍微画一下就可以了,题目给的度4树也就是四叉树,我按照度大的结点先放。第1层1个结点(4度结点剩19个)
第2层4个结点(4度结点剩15个)
第3层16个结点(4度结点剩0个,3度结点剩9个)
第4层15*4+1*3=63个结点(其中9个3度结点,1个2度结点,10个1度结点)
叶子结点数:(63-9-1-10)+9*3+1*2+10*1=82.
8.一棵非空的二叉树的先序遍历和后序遍历序列正好相反,则该二叉树一定满足( )。
A.所有结点均无左孩子 B.所有结点均无右孩子
C.只有一个叶子结点 D.是任意一棵二叉树
解析:C. 首先D肯定先排除。然后可以看出C项包含了AB,AB项是C项的其中两种特殊情况,C其实就跟一代单传一样,每代都只有一个孩子,就会出现遍历的时候只会有两种情况,区分根左或根右;先序是(根左/根右),而后序是(左根/右根),也就能造成先序后序正好相反的可能了。
9.若一棵二叉树的前(先)序遍历序列为:a,e,b,d,c,后序遍历序列为:b,c,d,e,a,则根结点的孩子结点( )。
A.只有e B.有e,b C.有e,c D.无法确定
解析:A. 根据先序(根左右)和后序(左右根)可以得出,当一个结点先序在开头,后序在结尾时,这个结点一定是唯一根结点。可知a为根结点,去掉a看剩下的e bdc和bcd e 这里e的位置可以看出e是类似a的且无兄弟结点,可知根结点的孩子只有e。
10.先序序列为a,b,c,d的不同二叉树的个数是( )。
A. 13 B. 14 C. 15 D.16
解析:B. 这个想画可以自己画一下。
【这边我想到另一种不想画的方法,首先根结点肯定是a,直接把a去掉考虑下面子子孙孙的事:
bcd这个顺序要分出左孩子和右孩子有4种分法:
左孩子 | 右孩子 | |
1 | bcd | 无 |
2 | bc | d |
3 | b | cd |
4 | 无 | bcd |
其中1,4类似,2,3类似,只考虑一半也就是1和2,继续分:
1的左孩子细分 | 左孩子 | 右孩子 |
1.1 | cd | 无 |
1.2 | c | d |
1.3 | 无 | cd |
2的左孩子细分 | 左孩子 | 右孩子 |
2.1 | c | 无 |
2.2 | 无 | c |
1的1.1和1.3类似2的情况可知存在两种情况,回推可知1,4各有5(2+1+2)种情况,2,3各有2(1+1)种情况,总共5+2+2+5=14种。】
三、写在后面的话
自己复习还是要有点仪式感,不然在宿舍学真的很容易走神啊,想着要把复习的一些容易错的地方,一些忘记了的地方记录到草稿纸上方便晚上最后的总结和回顾也就更专心了。进入学习的状态后就不容易走神了,而且有输入有输出也加深了对知识的记忆。
希望能帮助到一起期末复习的期末党们,也欢迎指出错误不足什么的,一起进步~