1.已知一棵有2011个结点的树,其叶节点个数为116,该树对应的二叉树中无右孩子的结点个数是
A)115 B)116 C)1895 D)1896
[解析]
树——>二叉树,最左孩子变左孩子,兄弟变右孩子
因此对应的二叉树没有右孩子,说明该节点在树里右边没有兄弟,也就是说,该节点是其父节点最右边的孩子。有多少个有孩子的节点,就有多少个“最右的孩子节点”,因此2011-116=1895
此外,对于根节点而言,它没有父节点当然也没有兄弟,因此也是没有右孩子的。所以+1=1896
2.将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是( )
Ⅰ.父子关系
Ⅱ.兄弟关系
Ⅲ.u的父结点与v的父结点是兄弟关系
A.只有Ⅱ B.Ⅰ和Ⅱ C.Ⅰ和Ⅲ D.Ⅰ、Ⅱ和Ⅲ
[解析]
考查森林和二叉树的转换。
森林与二又树的转换规则为“左孩子右兄弟”。在最后生成的二叉树中,父子关系在对应森林关系中可能是兄弟关系或原本就是父子关系。
情形Ⅰ:若结点v是结点u的第二个孩子结点,在转换时,结点v就变成结点u第一个孩子的右孩子,符合要求。
情形Ⅱ:结点u和v是兄弟结点的关系,但两者之中还有一个兄弟结点k,则转换后,结点v就变为结点k的右孩子,而结点k则是结点u的右孩子,符合要求。
情形Ⅲ:结点v的父结点是原先的父结点或兄弟结点。若结点u的父结点与v的父结点是兄弟关系,则转换之后,不可能出现结点u是结点v的父结点的父结点。
3.若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为1,则该平衡二叉树的结点总数为()
A.12 B.20 C.32 D.33
直接画:
公式:
最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1
或者说深度为n的平衡二叉树,至少有F(n)个结点。
Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。注意:F(0)=0,F(1)=1。
4 .若一棵完全二叉树有 768 个结点, 则该二叉树中叶结点的个数是
A . 257 B . 258 C . 384 D . 385
解答: 设 叶结点(度为0)数为 n .则度为 2 的结点数为 n -1 , 度为 1 的结点数为 0 或 1 ,结点数为偶数,所以本题中为 1。故而2n= 768 。n=384
5.已知一棵完整的二叉树的第6层(设根结点为第1层)有8个叶子结点,则该完全二叉树的结点个数最多是多少?最少是多少?
第6层有8个叶子,因此可知,最少时就是第6层有而且只有8个叶子结点,此时到第5层为满二叉树,最多就是第6层除了8个叶子外,都是度为2的结点,该层度为2结点个数为2^(6-1) - 8 = 24,也就是说除了到第6层是满二叉树外,还有7层,而且第7层有24*2 = 48个结点
最少:(2^5 - 1)+ 8= 31 + 8 = 39
最多:(2^6 - 1) + 48= 63 + 48 = 111
6.已知一个长度为16的顺序表L,其元素按关键字有序排列,若采用折半查找法查找一个不L中存在的元素,则关键字的比较次数最多是()。
A.4 B.5 C.6 D.7
【解析】
折半查找在查找不成功时和给定值进行关键字比较的次数最多为树的高度
7. 若将关键字1,2,3,4,5,6,7依次插入到初始为空的平衡二叉树T中,则T中平衡因子为0的分支结点的个数是
A.0 B.1 C.2 D.3
8. 已知三叉树T中6个叶结点的权分别是2,3,4,5,6,7,T的带权(外部)路径长度最小是
A.27 B.46 C.54 D.56
哈夫曼树也可以是k叉的,只是在构造k叉哈夫曼树时需要先进行一些调整。构造哈夫曼树的思想是每次选k个权重最小的元素来合成一个新的元素,该元素权重为k个元素权重之和。但是当k大于2时,按照这个步骤做下去可能到最后剩下的元素少于k个。
解决这个问题的办法是假设已经有了一棵哈夫曼树(且为一棵满k叉树),那么节点的度只有0和k,
表示度=k的节点数目,
表示度=0的节点数目(即叶子节点的数目)则可以计算出
=(k-1)
+1。(原理同二叉树中
=
+1)
于是对给定的n个权值构造k叉哈夫曼树时,可以先考虑增加一些权值为0的叶子节点,使得叶子节点总数为(k-1)
+1这种形式,然后再按照哈夫曼树的方法进行构造即可。
m表示节点个数
k表示K叉树
若(m-1)%(k-1) = 0说明不需要虚段,否则需要(K-1)-(m-1)%(k-1)个虚段。
本题m=6,k=3。
则(6-1)%(3-1)=1
需要虚段 2 - 1 = 1添加的虚段可视为0。然后按照优先取最小的三个的原则,构造三叉树。
9.一棵哈夫曼树共有9个结点,则其叶子结点的个数为______。
A.4 B.5 C.6 D.7
【法1】哈夫曼树中没有度为1的结点,用n个权值(对应n个叶子结点)构造哈夫曼树,共需要n-1次合并,即哈夫曼树中非叶子结点的总数为n-1,总结点个数为2n-1。
【法2】度=0的节点N个,度=2的节点N-1个,一共2N-1个
10.在一棵高度为2的5阶B树中,所含关键字的个数最少是
A.5 B.7 C.8 D.14
一棵高度为2的5阶B树,根结点只有到达5个关键字的时候才能产生分裂,成为高度为2的B树。(这里叶子节点不算
11.在一棵具有15个关键字的4阶B树中,含关键字的结点数最多是 ()
A 5 B6 C10 D15
据m阶B-树定义,
- 根结点至多有m棵子树,即至多有m-1个关键字
- 若根结点不是终端结点,则至少有2棵子树
- 除根以外的所有非叶结点至少有 ⌈ m/ 2 ⌉ 棵子树,即至少含有 ⌈ m/ 2 ⌉ − 1 个关键字
⌈ 4/ 2 ⌉ − 1 = 1
因此,根据题干,只需要满足根结点有1个关键字。非叶结点至少1个关键字,即,一个结点一个关键字时,结点数最多,最多为15个结点。
12.先序序列为a,b,c,d 的不同二叉树的个数是 () 。
A13 B14 C15 D16
根据二叉树前序遍历和中序遍历的递归算法中递归工作栈的状态变化得出:前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序。因为前序序列和中序序列可以唯一地确定一棵二叉树,所以题意相当于“以序列 a,b,c,d 为入栈次序,则出栈序列的个数为?”,对于 n 个不同元素进栈,出栈序列的个数为 =14 。
卡特兰数的应用:(更多见:https://blog.csdn.net/zhangmh93425/article/details/44677891)
- 出栈次序
- n个节点的二叉树构成
- 凸多边形的三角形划分
- 括号匹配,网格两点之间抵达方案等
套公式:
/(n+1)即可
13.已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,在此过程中,关键字之间的比较次数是() 。
A1 B2 C3 D4
将堆画成完全二叉树的形式,堆删除堆顶元素后,将二叉树最后的叶子节点12放到堆顶,
第一次比较15和10,取较小的10
第二次比较12和10,12和10对调
第三次比较12和16,。
一共三次。
14.下列选项给出的从根分别到两个叶子结点路径上的权值序列,能属于同一棵哈夫曼树的是:
A.24,10,5 和24,10,7
B. 24,10,5和24,12,7
C. 24,10,10和24,14,11
D. 24,10,5和24,14,6
普通给定一个数字或字符序列,构建哈夫曼树是非常简单易行的,只需要首先选择两个最小的元素做叶子结点,接着把它们的和与其他元素一起比较选择两个最小的元素结合在一起,直到所有元素都参与进来为止。
哈夫曼树所有的元素都在叶子结点上。分析:首先根据两个叶子,以及访问到叶子的前一个结点,这个结点一定是叶子的父亲结点。再根据哈夫曼树的结点一定有兄弟,即不存在度为1的结点。因此可以知道兄弟的权值,这样,给定的一个序列就可以推出两个叶子,两个序列推出四个叶子,这样就可以根据是否选择最小的两个叶子结点组合在一起作为判据,决定这个序列是否成立了。
我们一个一个来看。
首先看D
.
首先由第一个序列的10,5可以推出另一个叶子也是5,它们的父亲是10.到此为止,不能再瞎猜测其他叶子结点了。但我们知道两个叶子形成的结点有个权值为14的兄弟,但是不知道是叶子结点还是一个由叶子形成的结点,这个有待观察。
再看第二个序列,知道叶子结点6和父亲14,可以知道有个叶子兄弟是8,这个权值是14的结点有意思了,刚好可以和第一个结合成兄弟,且父亲为24,恰恰满足要求。
因此D是符合题目的树形。
再看C.
同样的分析思路再过一遍。
由第一个序列中的10,10可以得到有个叶子权值是0。第二个序列的14,11知道有个叶子是4.
OK,问题出来了,四个权值10,0,11,4是原始序列中的权值,按理说0,4最小,应该组合在一起,但是这里没有。所以是错误的树形。
当然需要明确的是,0和4不一定要组合在一起,要是序列中有1,那么0,1组合才是更小的。也就是说我们选择的是最小的,在不知道全局的情况下,局部的两个最小值最合理的是组合在一起。局部中不可能出现两个最小的分散的局面。这在哈夫曼树的构造中不可能出现的。以上D,C从正反角度看了这种问题的解法。
同理B,A不再多说,给出图形如下:B的树形:
如果24是第一个序列的,就不可能指到12,所以两个序列不是同一棵树的。
A也是同样的问题。
A的树形:
15.现有一棵无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( ) 。
A.根结点的度一定为2
B.树中最小元素一定是叶结点
C.最后插入的元素一定是叶结点
D.树中最大元素一定是无左子树
这道题的树用 左子树>根>右子树的设定 来做。下图足以证明ABC错误
16.试找出满足下列条件的二叉树:
1)先序序列与后序序列相同; 2)中序序列与后序序列相同;
3)先序序列与中序序列相同; 4)中序序列与层次序列相同;
【答案】先序遍历二叉树的顺序是“根—左子树—右子树”,中序遍历“左子树—根—右子树”,后序遍历顺序是:“左子树—右子树―根”,根据以上原则,
1)若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树.
2)若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树.
(3)若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树.
(4)若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树