| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:请教大家一个关于哈夫曼树的问题
只看楼主 加入收藏
lszf520
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-6-6
收藏
 问题点数:0 回复次数:2 
请教大家一个关于哈夫曼树的问题

构造哈夫曼树,并且最终输出带权路径长度
下面是源程序,但是但是程序开头包含的一个头文件和另外一个保存二叉树各种操作的实现的文件都不知道写,不知道哪位高手能小弟指点一下不,就是这两句包含的内容不会
#include"binarytree.h"
#include"binarytreeimple.cpp"




源程序如下
#include"binarytree.h" //保存二叉树的类型定义和操作声明
//假定ElmType被定义为整形int
#include"binarytreeimple.cpp" //保存对二叉树各种操作的实现

BTreeNode* CreateHuffman(ElemType a[],int n) //根据数组中a中n个权值建立一颗哈夫曼树,返回树根指针
{
BTreeNode **b,*q; b=new BTreeNode*[n];
int i,j; for(i=0;i<n;i++){
b[i]=new BTreeNode;
b[i]->data=a[i];b[i]->left=b[i]->right=NULL;
} for(i=1;i<n;i++){
int k1=-1,k2;
//让k1初始指向森林中第一棵树,k2初始指向森林中第二棵树
for(j=0;j<n;j++){
if(b[j]!=NULL&&k1==-1) {k1=j;continue;}
if(b[j]!=NULL) {k2=j;break;}
}
//从当前森林中求出最小权值树和次最小权值树
for(j=k2;j<n;j++){
if(b[j]!=NULL){
if(b[j]->data<b[k1]->data) {k2=k1;k1=j;}
else if(b[j]->data<b[k2]->data) k2=j;
}
}

q=new BTreeNode;
q->data=b[k1]->data+b[k2]->data;
q->left=b[k1];q->right=b[k2];

b[k1]=q;b[k2]=NULL;
}

delete []b;
return q;
}

ElemType WeightPathLength(BTreeNode*FBT, int len)
//根据FBT指针所指向的哈夫曼树求出带权路径长度,len初值为0
{
if(FBT==NULL) return 0;
else {

if(FBT->left==NULl&&FBT->right==NULL){
return FBT->data*len;
}
//路径长度之和,向下深入一层时len值增1
else {
return WeightPathLength(FBT->left,len+1)+
WeightPathLength(FBT->right,len+1);
}
}
}


void main()
{
cout<<"从键盘输入待构造的哈夫曼树中带权叶子结点数n:";
int n;
while(1) {cin>>n;if(n>1) break; else cout<<"重输n值:";}
cout<<"输入"<<n<<"个权值";
ElemType* a=new ElemType[n];
for(int i=0;i<n;i++) cin>>a[i];
//根据数组a建立哈夫曼树
BTreeNode* fbt=CreateHuffman(a,n);
//以广义表形式输出哈夫曼树
cout<<<"广义表形式的哈夫曼:";
PrintBTree(fbt); cout<<endl;
//输出哈夫曼树的权值,即带权路径长度
cout<<"哈夫曼树的权:";
cout<<WeightPathLength(fbt,o)<<endl;
//清除以bt为树根指针的二叉树
ClearBTree(fbt);
}

搜索更多相关主题的帖子: 哈夫曼 二叉树 整形 include 
2006-09-11 15:48
lszf520
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-6-6
收藏
得分:0 
没有人可以教我吗...
2006-09-11 18:57
冰山一角
Rank: 1
等 级:新手上路
帖 子:385
专家分:0
注 册:2006-9-5
收藏
得分:0 

做程序员太乏味?来这里www..cn试试吧,你肯定能找到乐趣!
2006-09-14 17:10
快速回复:请教大家一个关于哈夫曼树的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024997 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved