该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define n 6
#define MAX 999
#define NULL 0
typedef struct Hfnode
{
int data;
struct Hfnode *Lson,*Rson,*next;
}Hfnode,*Hfptr;
Hfptr inition()
{
int i; Hfptr h,p;
h=p=(Hfptr)malloc(sizeof(Hfnode));
h->data=MAX;
for(i=1;i<=n;i++)
{
p->next=(Hfptr)malloc(sizeof(Hfnode));
p=p->next;
p->Lson=p->Rson=NULL;
scanf("%d",&p->data);
}
p->next=h;
return h;
}
Hfptr creatHftree(Hfptr head)
{ int i; Hfptr p,q,r,t1,t2;
for(i=1;i
{
r=(Hfptr)malloc(sizeof(Hfnode));
t1=head->next;
t2=t1->next;
r->data=t1->data+t2->data;
r->Lson=t1;
r->Rson=t2;
head->next=t2->next;
q=head;
p=head->next;
while(1)
if(p->datadata)
{q=p;p=p->next;}
else
{ r->next=p;
q->next=r;
break;
}
}
p=head->next;
free(head);
return (p);
}
void preorder(Hfptr p)
{
if(p==NULL)return;
printf("%4d ",p->data);
preorder(p->Lson);
preorder(p->Rson);
}
void findcode()
{ int i,top=0;Hfptr p;int s[8]={0};
p=(Hfptr)malloc(sizeof(Hfnode));
if(p==NULL)return ;
if(p->Lson!=NULL)
{
s[top++]=0;
findcode(p->Lson);
--top;
}
if(p->Rson!=NULL)
{
s[top++]=1;
findcode(p->Rson);
--top;
}
if(p->Lson==NULL&&p->Rson==NULL)
{
for(i=0;i<8;i++)
printf("%d\n",s[i]);
}
}
void main()
{
Hfptr Hfroot,head;
head=inition();
Hfroot=creatHftree(head);
preorder(Hfroot);
findcode();
}