哈夫曼树的建立
来源:互联网 发布:ss账号在淘宝上怎么买 编辑:程序博客网 时间:2024/05/17 02:04
选取最小的两个节点(根节点即无父节点)作为左右子树建立新节点
重复上述操作 直到只剩一个根节点
#include<bits/stdc++.h>using namespace std;typedef struct node{ int data; int parent,lchild,rchild;} HTree;void chazhao(HTree t[],int k,int *s1,int *s2){ int i; for(i=1;i<k&&t[i].parent!=0;i++) { } *s1=i; for(i=1;i<k;i++) //找最小的s1 { if(t[i].data<t[*s1].data&&!t[i].parent) *s1=i; } for(i=1;i<k;i++) { if(!t[i].parent&&i!=*s1) break; } *s2=i; for(i=1;i<k;i++) //找最小的s2 { if(t[i].data<t[*s2].data&&!t[i].parent&&i!=*s1) *s2=i; }}void build(HTree t[],int n){ int m; m=2*n-1; for(int i=1; i<=m; i++) { t[i].parent=t[i].lchild=t[i].rchild=0; } int s1,s2; for(int i=n+1; i<=m; i++) //依次找出最小的两个建立新节点 { chazhao(t,i-1,&s1,&s2); t[s1].parent=t[s2].parent=i; t[i].lchild=s1; t[i].rchild=s2; t[i].data=t[s1].data+t[s2].data; }}int main(){ int n; scanf("%d",&n); HTree t[20020]; for(int i=1;i<=n;i++) scanf("%d",&t[i].data); build(t,n); return 0;}
2 0
- 哈夫曼树的建立
- 哈夫曼树的建立
- 哈夫曼树的建立
- 建立哈夫曼树
- 建立哈夫曼树
- 哈夫曼树建立、哈夫曼编码算法的实现
- 哈夫曼树的建立 源程序+注释+运行结果
- 哈夫曼树的建立以及哈夫曼编码
- 哈夫曼树的建立和哈夫曼编码
- 如何建立网站,建立网站的程序?
- Oracle 建立序列以及触发器的建立
- Cookie的建立使用
- 建立自己的资源管理器
- 建立自己的网络电台
- Tomcat环境的建立
- 建立自己的RSS
- 建立自己的RSS
- 网络游戏的消费行为建立
- C语言函数指针理解(2)
- 10.字符串和相关函数
- C#泛型
- 基于唯一状态的前端组件开发
- poj 2104 (暴力or划分树)
- 哈夫曼树的建立
- 树结构练习——判断给定森林中有多少棵树
- ArrayList和LinkedList的区别
- Java不得不了解的基础_Java的反射与代理
- 树结构练习——判断给定森林中有多少棵树
- 使用Eclipse进行JNI开发
- centos7上提供ocfs2文件系统支持
- Spring整理系列(11)——@Configuration注解、@Bean注解以及配置自动扫描、bean作用域
- KMP算法