3.4 例题举例
【例 3.1】一棵度为2的有序树与一棵二叉树有何区别?
解答:一棵度为二的有序树与一棵二叉树的区别在于,有序树的结点次序是相对于另一结点而言的,如果有序树中的子树只有一个孩子时,这个孩子结点就无须区分其左右次序,而二叉树无论其孩子数是否为2,均需确定其左右次序,也就是说二叉树的结点次序不是相对于另一结点而言而是确定的。
【例 3.2】试找出分别满足下面条件的所有二叉树:
(1)前序序列和中序序列相同; (2)中序序列和后序序列相同;
(3)前序序列和后序序列相同; (4)前序、中序、后序序列均相同。
解答:空树满足所有条件。非空树如下:
(1) 前序序列和中序序列相同的二叉树是:没有左子树的二叉树(右单支树)。
(2) 中序序列和后序序列相同的二叉树是:没有右子树的二叉树(左单支树)。
(3) 前序序列和后序序列相同的二叉树是:只有根的二叉树。
(4) 前序、中序、后序序列均相同的二叉树:只有根结点的二叉树。
【例3.3】假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成,这8个字母在电文中出现的概率分别为{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}.
(1)为这8个字母设计哈夫曼编码。
(2)若用这三位二进制数(0...7)对这8个字母进行等长编码,则哈夫曼编码的平均码长是等长编码的百分之几?它使电文总长平均压缩多
解答:(1)构造哈夫曼树,可以解得哈夫曼编码为a:0010,b:10,c:00000,
d:0001,e:01,f:00001,g:11,h:0011。
(2) 用三位二进行数进行的等长编码平均长度为3,而根据哈夫曼树编码的平均码长为:4*0.07+2*0.19+5*0.02+4*0.06+2*0.32+5*0.03+2*0.21+4*0.10=2.61
2.61/3=0.87=87%
其平均码长是等长码的87%,所以平均压缩率为13%。
【例3.4】以二叉链表为存储结构,写一算法用括号形式(key LT,RT)打印二叉树,其中key是根结点数据,LT和RT是括号形式的左子树和右子树。并且要求空树不打印任何信息,一个结点x的树的打印形式是x而不是(x,)的形式。
【例3.5】若二叉树中各结点的值均不相同,则由二叉树的前序序列和中序序列,或由其后序序列和中序序列均能唯一地确定一棵二叉树,但由前序序列和后序序列却不一定能唯一地确定一棵二叉树。
(1)已知一棵二叉树的前序序列和中序序列分别为ABDGHCEFI和GDHBAECIF,请画出此二叉树。
(2)已知一棵二叉树的在序序列和后序序列分别为BDCEAFHG和DECBHGFA,请画出此二叉树。
(3)已知一棵二叉树的前序序列和后序序列分别为AB和BA,请画出这两棵不同的二叉树。
解答:(1)已知二叉树的前序序列为ABDGHCEFI和中序序列GDHBAECIF,则可以根据前序序列找到根结点为A,由此,通过中序序列可知它的两棵子树包分别含有GDHB和ECIF结点,又由前序序列可知B和C分别为两棵子树的根结点...以此类推可画出所有结点: