2013年8月12日

摘要: 实现方案:1. 建立哈夫曼树(1)统计各个字符出现次数,按次数从小到大的顺序生成队列;(2)每次获取队列前两个节点(即队列中字符出现次数最少的两个),同时队头前移两位,将它们的字符出现次数相加,得到一个新节点,插入到队列合适位置;(3)当队列中仅剩一个节点时,哈夫曼树构造完毕,该节点即为树的根节点。2. 建立哈夫曼编码表(1)从哈夫曼树根开始遍历,遍历结束的同时编码表也构造完成,整个过程用递归实现,注意结束条件为遍历到叶子节点;(2)如果当时节点的左孩子不为空,则code[k]='0',递归遍历其左子树;(3)如果当时节点的右孩子不为空,则code[k]='1' 阅读全文
posted @ 2013-08-12 23:01 RAUL_AC 阅读(876) 评论(0) 推荐(0) 编辑
摘要: 为充分利用二叉树节点,引入线索二叉树,将左孩子指针为空时指向前驱,将右孩子指针为空时指向后继。输入:ABC``D``E`F``(`用空格替代)中序遍历结果:CBDAEF代码实现中的部分挺巧妙的,偶尔可以翻出来看看,琢磨琢磨。 1 #include 2 #include 3 4 // 线索存储标志位 5 // Link(0) 左右孩子 6 // Thread(1) 前驱后继 7 typedef enum{Link,Thread} TAG; 8 9 // 线索二叉树节点结构 10 typedef struct BiThrNode 11 { 12 char da... 阅读全文
posted @ 2013-08-12 00:33 RAUL_AC 阅读(553) 评论(0) 推荐(0) 编辑

导航