哈夫曼树的建立

来源:互联网 发布: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
原创粉丝点击