构造哈弗曼树
来源:互联网 发布:linux系统查看ip地址 编辑:程序博客网 时间:2024/05/21 15:06
#include<iostream>using namespace std;struct HTreeNode{int weight;HTreeNode* parent;HTreeNode* lchild;HTreeNode* rchild;};HTreeNode* CreatHuffmanTree(int *w, int n){int m = 2 * n - 1;HTreeNode* HT = new HTreeNode[m];for (int i = 0; i < n; ++i){HT[i].weight = w[i]; HT[i].parent = HT[i].lchild = HT[i].rchild = NULL;}for (int i = n; i < m; ++i){HT[i].weight = 0; HT[i].parent = HT[i].lchild = HT[i].rchild = NULL;}int m1 = -1, m2;for (int i = n; i < m; ++i){int m1 = -1, m2;for (int j = 0; j < i; ++j){if (!HT[j].parent&&m1 == -1){ m1 = j; continue; }if (!HT[j].parent){ m2 = j; break; }}for (int j = m2; j < i; ++j){if (!HT[j].parent){if (HT[j].weight < HT[m1].weight){ m2 = m1; m1 = j; }else if (HT[j].weight < HT[m2].weight)m2 = j;}}HT[i].weight = HT[m1].weight + HT[m2].weight;HT[i].lchild = &HT[m1]; HT[i].rchild = &HT[m2];HT[m1].parent = &HT[i]; HT[m2].parent = &HT[i];}return &HT[m - 1];}void PreOrderTraverse(HTreeNode* T){if (T){cout << T->weight << " ";PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);}}void main(){int w[] = { 7, 5, 2, 4 };HTreeNode* HT = CreatHuffmanTree(w, sizeof(w) / sizeof(int));PreOrderTraverse(HT);}
0 0
- 构造哈弗曼树
- 哈弗曼树的构造
- 哈弗曼树的构造
- 哈弗曼树及其构造
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造
- 构造、拷贝构造、析构
- 构造器(构造方法)
- 构造、拷贝构造、赋值
- 构造方法/构造器
- 拷贝构造 赋值构造
- 构造中调用构造
- 构造方法 构造器 构造函数
- 哈弗曼树的构造、什么是哈弗曼编码和怎样构造一颗编码代价最小又无二义的二叉树--用哈弗曼树
- notepad快速解决一个小问题
- 短信还原的注意点
- VB.net 监视Windows剪切板中数据变化
- 看JDBC轻松连接数据库,你值得拥有
- 前端面试题
- 构造哈弗曼树
- LightOJ 1292 Laser Shot(暴力)
- Mybatis入门实例(1) - SSM(一)
- LintCode-生成括号
- 005_Http之request获取客户端信息06-请求转发及包含和重定向的区别
- 项目中遇到的JS闭包问题
- Android数据库更新并保留原来数据的实现
- VB.net调用蒙恬Write2Go笔迹手写板进行电子签名
- 记录看到的一些jquery效率上的问题