习题5 6.已知一棵度为m 的树中有:n1 个度为1 的结点,n2 个度为2 的结点,……,nm 个度为m 的结点,问该树中共有多少个叶子结点
【解答】设该树的总结点数为n,则 n=n0+n1+n2+……+nm 又: n=分枝数+1=0× n0+1× n1+2× n2+……+m× nm+1 由上述两式可得: n0= n2+2n3+……+(m-1)nm+1 7.已知二叉树的中序和后序序列分别为CBEDAFIGH 和CEDBIFHGA,试构造该二叉树
【解答】二叉树的构造过程如图 5-12 所示
8.对给定的一组权值W=(5,2,9,11,8,3,7),试构造相应的哈夫曼树,并计算它的带权路径长度
【解答】构造的哈夫曼树如图5-13 所示
树的带权路径长度为: WPL=2× 4+3× 4+5×3+7× 3+8×3+9× 2+11× 2 =120 10.算法设计 ⑴ 设计算法求二叉树的结点个数
【解答】本算法不是要打印每个结点的值,而是求出结点的个数
所以可将遍历算法中的“访问”操作改为“计数操作”,将结点的数目累加到一个全局变量中,每个结点累加一次即完成了结点个数的求解
具体算法如下: ⑵ 设计算法按前序次序打印二叉树中的叶子结点
【解答】本算法的要求与前序遍历算法既有相同之处,又有不同之处
相同之处是打印次序均为前序,不同之处是此处不是打印每个结点的值,而是打印出其中的叶子结点,即为有条件打印
为此,将前序遍历算法中的访问操作改为条件打印即可
算法如下: ⑶ 设计算法求二叉树的深度
【解答】当二叉树为空时,深度为 0;若二叉树不为空,深度应是其左右子树深度的最大值加 1,而其左右子树深度的求解又可通过递归调用本算法来完成
具体算法如下: ⑷ 编写算法,要求输出二叉树后序遍历序列的逆序
【解答】要想得到后序的逆序,只要按照后序遍历相反的顺序即可,即先访问根结