6-18 二叉树的双序遍历(Double-order traversal)是指:对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来双序遍历它的右子树。试写出执行这种双序遍历的算法。

声明:类结构按教材的二叉树类定义

双序遍历

template < calss Type >void BinaryTree< Type >::DbOrder(){
DbOrder(root);
}

template< class Type >void BinaryTree< Type >
::DbOrder(BinTreeNode< Type > *current){
if(current!=NULL){
visit();
DbOrder(current->leftChild);
visit();
DbOrder(current->rightChild);
}
}


6-20 已知一棵树的先根次序遍历的结果与其对应二叉树表示(长子-兄弟表示)的前序遍历结果相同,树的后根次序遍历结果与其对应二叉树表示的中序遍历结果相同。试问利用树的先根次序遍历结果和后根次序遍历结果能否唯一确定一棵树?

当然可以. 每一个二叉树可以唯一的转变成一棵树.

6-21 给定权值集合{15 03 14 02 06 09 16 17},构造相应的霍夫曼树,并计算它的带权外部路径长度。

WPL=229
身边没有稿纸,心中建树,+所有的分支结点的权值


6-22 假定用于通讯的电文仅8个字母c1,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频率分别为5,25,3,6,10,11,36,4. 试为这8个字母设计不等长Huffman编码,并给出该电文的总码数。

c1:0110 c2:10 c3:0000
c4:0111 c5:001 c6:010
c7:11 c8:0001

总码率为:257


6-23 给定一组权值:23,15,66,07,11,45,33,52,39,26,58,试构造一棵具有最小带权外部路径长度的扩充4叉树,要求该4叉树中所有内部结点的度都是4,所有外部结点度为0.这棵扩充4叉树的带权外部路径长度是多少?

本题关键是11个结点没法构成符合要求的4叉树,需要补充2个节点。补充两个权值为0的节点并不影响最后的外部路径长度。

Comments (0)