必考题3
二叉树相关(分值:1-2分)
二叉树题型比较多,基本的二叉树的特征需要理解透彻。(完全二叉树、满二叉树、、最优二叉树(哈夫曼树)、排序二叉树、线索二叉树)
例1:设有二叉树(或查找二叉树)如下图所示,建立该二叉树的关键码序列不可能是();
- A.23 31 17 19 11 27 13 90 61
- B.23 17 19 31 27 90 61 11 13
- C.23 17 27 19 31 13 11 90 61
- D.23 31 90 61 27 17 19 11 13
解题技巧:
1、二叉排序树(二叉查找树)的特征是左子树小于根,右子树大于根
2、则进行选项的排除操作,排除规则是子节点不能出现在父节点前面,因为如果子节点先出现,那子节点就会成为父节点,与规定的树结构无法达到一致。例选项C,13出现在11前面,那13出现后插入到17为父节点的左子树中,当11要插入时,11只能插入到13为父节点的树的左子树,与目标树不一致,所以答案是C。
补充讲解一下二叉排序树的构建过程。
以选项A为例,①首先23首先出现,将23插入到一个空的树中,所以23成为根节点;②将31插入到①构成的树中,31与根节点23做比较,31>23,根据二叉排序树特点 31应插入到23为父节点的右子树;③然后将17插入到②的树中,17与根节点23作比较,17<23,根据二叉排序树特点 17应插入到23为父节点的左子树;④将19插入到③中树结构中,19与根节点23作比较,19<23,根据二叉排序树特点 应插入到23为父节点的左子树中,因左子树存在17节点,将19与17作比较,19>17,根据二叉排序树特点 19应插入17为父节点的右子树;
⑤剩下节点以此类推,得出目标二叉树如上图。
例2:下表为某文件中字符出现频率。采用霍夫曼编码,则bee编码为();编码为"110001001101"对应字符序列为();
解题技巧
1、首先构建霍夫曼树,构建过程是选取当前未被选择的频率中最小的两个值,作为左右子树(左子树小,右子树大),左右子树的和作为父节点构造树
2、对构造完成的树按照树杈从上到下,从左向右的顺序进行01编码
3、权值是从根节点到目标节点所需的路径长度*频率
解题过程如下:
(1)得bee编码为10111011101
(2)110001001101 对应字符 1100 0 100 1101 对应 f a c e
例3:对下面的二叉树进行顺序存储(用数组MEM表示),已知结点A、B、C在MEM中对应元素的下标分别为1、2、3,那么结点D、E、F对应的数组元素下标为( )。
顺序存储需要补齐二叉树,对于结点如果没有对应的左右孩子结点,则在对应数组位置存储为空。
所以D(6)、E(7)、F(14)
例4:二叉树的高度是指其层数, 空二叉树的高度为0,仅有根结点的二叉树高度为1,若某二叉树中共有1024个结点,则该二叉树的高度是整数区间( )中的任一值。
问题1选项
A.(10, 1024)
B.[10, 1024]
C.(11, 1024)
D.[11, 1024]
解题:
答案是D。
1024个节点对于是2^10
对于完全二叉树的特征当二叉树高度为10时,结点个数为2^10-1=1023,而当前有1024个结点,所以二叉树高度>=11
当二叉树每个结点都只有一个子节点,那1024个结点高度就是1024
例5:
设树T的度为4,其中度为1、2、3、4的结点的个数分别为4、2、1、1,则T中叶子结点的个数为多少?
答案是:8
解题:
树的性质:N个结点的树有N-1条边
设 n0=叶子结点数,n1=度为1的结点数,n2=度为2的结点数,n3=度为3的结点数,n4=度为4的结点数。
那么计算得
结点数:n0+n1+n2+n3+n4=N
N=n0+4+2+1+1=8+n0
边数:n0*0+n1*1+n2*2+n3*3+n4*4=N-1
N-1=0+4*1+2*2+1*3+1*4=15
得出:8+n0=15+1
n0=8,所以答案叶子结点数为8
树的考察方式比较多,所以还是需要多多分析理解一下树与不同树的概念和特征。大致总结一下:
1、二叉树的第i层上至多有2^(i-1)个结点。
二叉树则每层最大有两个子节点,当每层都是满结点时,每层的结点数是上一层父节点数的2倍。
简单的说,根节点是第一层,第一层只有一个根节点,节点个数为2^0;第二层是对根节点分成左右两个节点,所以第二层结点个数为2^1,第n层结点个数为2^(n-1);
2、深度为k的二叉树,至多有2^k -1个结点。
简单推算一下,其实是等比数列的求和。第一层有2^0,第二层有2^1.....,第k层有2^(k-1),
结点总数为2^0+2^1+.....+2^(k-1),根据等比数列求和公式
3、查找二叉树特征:左子树小于根,右子树大于根
4、堆排序:大顶堆是父结点大于所有的孩子结点;小顶堆是父结点小于所有的孩子结点