中级软件设计师必考题及解题技巧2

必考题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),根据等比数列求和公式

\frac{a1*(1-q^{n})}{1-q}=\frac{1*(1-2^{k})}{1-2}=2^{k}-1

3、查找二叉树特征:左子树小于根,右子树大于根

4、堆排序:大顶堆是父结点大于所有的孩子结点;小顶堆是父结点小于所有的孩子结点

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值