算法导论 哈夫曼树的传输

typedef struct
{
	int x;
	char c;
}Trans,*pTrans;

int storeHuffman(Trans *a,pHuff root,int i)
{
	int j,k;
	if(root->left && root->right)
	{
		a[i].x=root->freq;
		a[i].c=root->c;
		j=storeHuffman(a,root->left,i+1);
		k=storeHuffman(a,root->right,j);
		return k;
	}
	else
	{
		a[i].x=root->freq;
		a[i].c=root->c;
		return i+1;
	}
		
}

int decodeHuffman(Trans *a,int i,pHuff ph,char di)
{
	pHuff ph2;
	if(di!='M')
	{
		ph2=(pHuff)malloc(sizeof(Huff));
		ph2->freq=a[i].x;
		ph2->c=a[i].c;
		ph2->left=ph2->right=NULL;
	}
	else
	{
		ph->freq=a[i].x;
		ph->c=a[i].c;
	}
	if(a[i].c!='*')
	{
		if(di=='L')
		{
			ph->left=ph2;
		}
		else if(di=='R')
		{
			ph->right=ph2;
		}
		return i+1;
	}
	else
	{
		if(di=='L')
		{
			ph->left=ph2;
		}
		else if(di=='R')
		{
			ph->right=ph2;
		}
		else
		{
			ph2=ph;
		}
		int k,j;
		j=decodeHuffman(a,i+1,ph2,'L');
		k=decodeHuffman(a,j,ph2,'R');
		return k;
	}
}

void  main()  
{  
	Trans a2[2*N-1];
	storeHuffman(a2,ph,0);
	printA(a2,2*N-1);
	pHuff ph2=(pHuff)malloc(sizeof(Huff));
	ph2->left=ph2->right=NULL;
	decodeHuffman(a2,0,ph2,'M');
	getCode(ph2,s,'d',0);
	printf("\n");
        getchar();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值