#include <iostream>
#include <stdio.h>
#include<stdlib.h>
using namespace std;
class HuffmanTree; //前视定义,否则友元无法定义
class HUffmanNode
{
friend class HuffmanTree; //链表结点类的定义
HUffmanNode *lchild,*rchild,*link;
int data;
char ch;
HUffmanNode (HUffmanNode *ptr = NULL) {link=ptr;
lchild=rchild=NULL;
}
};
class HuffmanTree
{//单链表类的定义
private:
HUffmanNode *root; //指向首结点的指针
public:
HuffmanTree ()
{
root=new HUffmanNode();
}
void input(char a[],int n[],int m);
void inorder(HUffmanNode *t)
{
if(t!=NULL)
{
inorder(t->lchild);
if(t->lchild==NULL&&t->rchild==NULL)
cout<<t->ch<<“”;
inorder(t->rchild);
}
}
};
void HuffmanTree :: input (char a[],int n[],int m){
HUffmanNode *p,*t,*s,*q,*pr,*pt;
int temp,flag=0;
char tmp;
t=new HUffmanNode();
for(int i=0;i<m;i++)
{
for(int j=i;j<m;j++)
{
if(n[i]<n[j])
{
temp=n[j];
n[j]=n[i];
n[i]=temp;
tmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
int i=0;
while(i!=m)
{
p=new HUffmanNode();
p->data=n[i];
p->ch=a[i];
p->link=root->link;
root->link=p;
i++;
}
for(int i=0;i<m-1;i++)
{
q=root->link;
t=new HUffmanNode();
t->data=q->data+q->link->data;
t->lchild=q;
t->rchild=q->link;
flag=0;
while(q->link!=NULL)
{
if(t->data<q->link->data)
{
s=q->link;
q->link=t;
t->link=s;
flag=1;
break;
}
q=q->link;
}
if(flag==0)
{
q->link=t;
t->link==NULL;
}
root=root->link->link;
}
root=root->link;
cout<<“中序叶子序列:”;
inorder(root);
}
int main()
{
char a[10];
int n[10];
char s;
int m,i=0;
while(cin>>s>>m)
{
a[i]=s;
n[i]=m;
i++;
}
HuffmanTree tr;
tr.input(a,n,i);
return 0;
}