# 树习题 ## 基本概念 **例题** 在一棵度为$4$的树$T$中,若有$20$个度为$4$的结点,$10$个度为$3$的结点,$1$个度为$2$的结点,$10$个度为$1$的结点,则树$T$的叶结点个数是()。 $A.41$ $B.82$ $C.113$ $D.122$ 解:$B$。设树中度为$i$($i=0,1,2,3,4$)的结点数分别为$n_i$,树中结点总数为$n$,则$n$=分支数$+1$,而分支数又等于树中各结点的度之和,即$n=1+0n_0+n_1+2n_2+3n_3+4n_4=n_0+n_1+n_2+n_3+n_4$。依题意,$n_1+2n_2+3n_3+4n_4=10+2+30+80= 122$,$n_1+n_2+n_3+n_4=10+1+10+20=41$,可得出$n_0=82$,即树$T$的叶结点的个数是$82$。 ## 二叉树 ### 二叉树性质 **例题** 下列关于二叉树的说法中,正确的是()。 $A.$度为$2$的有序树就是二叉树 $B.$含有$n$个结点的二叉树的高度$\lfloor\log_2n\rfloor+1$ $C.$在完全二叉树中,若一个结点没有左孩子,则它必是叶结点 $D.$在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二叉排序树与删除前原二叉排序树相同 解:$C$。在二叉树中,若某个结点只有一个孩子,则这个孩子的左右次序是确定的,而在度为$2$的有序树中,若某个结点只有一个孩子,则这个孩子就无须区分其左右次序,$A$错误。选项$B$仅当是完全二叉树时才有意义,对于任意一棵二叉树,高度可能为$\lfloor\log_2n\rfloor+1\sim n$。在二叉排序树中插入结点时,一定插入在叶结点的位置,故若先删除分支结点再插入,则会导致二叉排序树的重构,其结果就不再相同,$D$错误。根据完全二叉树的定义,在完全二叉树中,若有度为$1$的结点,则只可能有一个,且该结点只有左孩子而无右孩子,选项$C$正确。 **例题** 设二叉树有$2n$个结点,且$m #### 结点数 **例题** 若度为$m$的哈夫曼树中,叶子结点个数为$n$,则非叶子结点的个数为()。 $A.n-1$ $B.\lfloor n/m\rfloor-1$ $C.\lceil(n-1)/(m-1)\rceil$ $D.\lceil n/(m-1)\rceil-1$ 解:$C$。一棵度为$m$的哈夫曼树应只有度为$0$和$m$的结点,设度为$m$的结点(叶子结点)有$n_m$个,度为$0$的结点有$n_0$个,又设结点总数为$n$,$n=n_0+n_m$。因有$n$个结点的哈夫曼树有$n-1$条分支,则根据总结点与度数关系的公式($n=n_1+2n_2+\cdots+mn_m+1$)得到$mn_m=n-1=n_m+n_0-1$,整理得$(m-1)n_m=n_0-1$,$n_m=(n-1)/(m-1)$。 #### 路径 **例题** 下列选项给出的是从根分别到达两个叶结点路径上的权值序列,属于同一棵哈夫曼树的是()。 $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$ 解:$D$。首先根据两个叶子,以及访问到叶子的前一个结点,这个结点一定是叶子的父亲结点。再根据哈夫曼树的结点一定有兄弟,即不存在度为$1$的结点。因此可以知道兄弟的权值,这样,给定的一个序列就可以推出两个叶子,两个序列推出四个叶子,这样就可以根据是否选择最小的两个叶子结点组合在一起作为判据,决定这个序列是否成立了。 对于$D$,第一组最后一个是叶子结点为$5$的权值,中间的是$10$,则另一个叶子结点权值是$10-5=5$。这里不能继续推出。然后看第二组最后一个是叶子结点的权值为$6$,则另一个叶子结点权值为$14-6=8$。所以可以构造哈夫曼树: ```txt 24 | ------ 10 14 | | --- --- | | | | 5 5 6 8 ``` 同理分析$A$,$24,10,5$和$24,10,7$两组的第二个权值相加为$20\neq24$,权值根本不相等不是哈夫曼树。 同理$B$,$24,10,5$和$24,12,7$第二个权值相加也不等于第一个值,所以也不对。 对于$C$,$24,10,10$和$24,14,11$数值相加都能对的上,计算两个叶子权值$10-10=0$、$14-11=3$。具体构造出哈夫曼树: ```txt 24 | ------- 10 14 | | ---- ---- | | | | 10 0 11 4 ``` 看叶子节点的值,最小的是$0$和$4$,他们应该结合在一起,所以构造有问题。 ### 并查集 **例题** 假设初始化$0\sim9$的并查集,按照$1-2$、$3-4$、$5-6$、$7-8$、8-9$、$1-8$、$0-5$、$1-9$的顺序进行查找和合并,求最后集合数量。 解:初始化时$0\sim9$一共十个集合。$1-2$时合并$\{1,2\}$。$3-4$时合并$\{3,4\}$、$5-6$时合并$\{5,6\}$、$7-8$时合并$\{7,8\}$、$8-9$时合并$\{7,8,9\}$、$1-8$时合并$\{1,2,7,8,9\}$、$0-5$时合并$\{0,5,6\}$、$1-9$时属于同一集合不用合并。最后为$\{0,5,6\}$、$\{1,2,7,8,9\}$、$\{3,4\}$,所以有三个。