c++哈夫曼树实现-创新互联

#include
using namespace std;

马鞍山ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!

struct Tpoint {
 int weight;
 int lchild;
 int rchild;
 int parent;
};

void INIT(Tpoint* T,int n) {                        //初始化哈夫曼树
 for (int i = 1; i<= 2 * n - 1; i++) {
     T[i].lchild = 0;
     T[i].rchild = 0;
     T[i].parent = 0;
 }
 int weight;
 for (int i = 1; i<= n; i++) {
     cin >>weight;
     T[i].weight = weight;
 }
}

void Show(Tpoint* T,int n) {     //展示二叉树
 for (int i = 1; i<=  2 * n - 1; i++) {
     cout<< i<<"\t"<  }
}

void SelectMin(Tpoint* T, int n, int& m1, int& m2) {  //找到i之前且双亲为0的最小两个结点
 for (int i = 1; i<= n; i++) {
     if (T[i].parent != 0)
         continue;
     if (T[m1].weight >T[i].weight)
         m1 = i;
 }
 for (int i = 1; i<= n; i++) {
     if (T[i].parent != 0 || i == m1)
         continue;
     if (T[m2].weight >T[i].weight)
         m2 = i;
 }
}

void BuildHuffman(Tpoint* T, int n) {  //生成huffman树
 int m1=1, m2;
 for (int i = n + 1; i<= 2 * n - 1; i++) {
     m1 = 0, m2 = 0;
     SelectMin(T, i - 1, m1, m2);
     T[m1].parent = i ;
     T[m2].parent = i ;
     T[i].lchild = m1;
     T[i].rchild = m2;
     T[i].weight = T[m1].weight + T[m2].weight;
 }
}

int main() {
 Tpoint T[100];
 T[0].weight = 1000;
 int n;
 cout<< "输入哈夫曼树叶子节点数";
 cin >>n;
 cout<< endl;
 INIT(T,n);
 BuildHuffman(T, n);
 Show(T,n);
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:c++哈夫曼树实现-创新互联
当前链接:http://scyanting.com/article/ddossp.html