对一棵二叉树进行哈夫曼编码--递归法--回溯法

本文介绍如何使用递归法和回溯法来构造哈夫曼树并进行编码,特别适合初学者理解。通过手动构造一棵二叉链表形式的哈夫曼树,然后自上而下进行递归编码,详细代码展示整个过程。
摘要由CSDN通过智能技术生成

完全实现构造哈夫曼树、进行哈夫曼编码是一个浩大的工程。

对于初学者,可能好久都不能把哈夫曼树构造出来。

下面我们手工构造一棵基于二叉链表的树,且假定其就是哈夫曼树。

然后,我们采用自上而下递归的方法对其进行编码。

直接上代码啦。

#include <string>
#include <iostream>
using namespace std;
struct node
{//树的结点结构。二叉链表表示法
	char data;
	node *lchild,*rchild;
}; 

void PreOrder(node *T) 
{//二叉树的先序遍历 
	if(T==0)
		return;
	cout<<T->data<<" ";
	PreOrder(T->lchild);
	PreOrder(T->rchild);
}
void HuffmanCoding(node *T,string &s)
{//递归求哈夫曼编码 
	
	if(T->lchild==0 && T->rchild==0)
	{
		
		cout<<T->data<<" "<<s<<"\n";
		return;
	}
	string tmp;
	tmp=s;
	if(T->lchild!=0)
	{//左分支标0
		s.push_back('0');
		HuffmanCoding(T->lchild,s);
		s=tmp;
	}
	if(T->rchild!=0)
	{//右分支标1
		s.push_back('1');
		HuffmanCoding(T->rchild,s);
		s=tmp;		
	}
	
	
}




int main(  )
{
	node a,b,c,d,e;//定义5
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值