请教最优二叉树的建立与HuffmanCode的建立的问题。
用数组承载树叶。然后完成2叉树的建立以及HuffmanCode的添加,一道实验作业,请高手帮忙看看,谢谢
源程序如下:
#include<iostream>
using namespace std;
#define Max 30
typedef struct HuffNode
{
int Data;
int LchildPosion;
int RchildPosion;
int TFag;
int Parent;
int HuffCode;
}HuffNode;
int main()
{
HuffNode TreeNode[Max];//建立Huffman Tree
cout <<"请确认叶子的个数"<<endl; int N;
cin >> N;
for(int i=0;i<(2*N-1);i++)//初始化所有节点
{
TreeNode[i].Data=5000;
TreeNode[i].LchildPosion=0;
TreeNode[i].RchildPosion=0;
TreeNode[i].TFag=0;
TreeNode[i].Parent=0;
TreeNode[i].HuffCode=2;
}
cout <<"请输入叶子的权值"<<endl;
for(i=0;i<N;i++)
{
cin >>TreeNode[i].Data;
}
cout <<"runing"<<endl;//测试
int x1=5000,x2=5000;
int p1,p2;
for(i=0;i<(2*N-1);i++)//生成huffman树
{
if((TreeNode[i].Data<x1) && (TreeNode[i].TFag==0))
{
x2=x1;
x1=TreeNode[i].Data;
p1=i;//记录最小权叶子的位置p1
}
else
if((TreeNode[i].Data<x2) && (TreeNode[i].TFag==0))
{
x2=TreeNode[i].Data;
p2=i;//记录次小权叶子的位置p2
}
for(int k=N;k<2*N-1;k++)
{
TreeNode[k].Data=x1+x2;
TreeNode[k].LchildPosion=p1;
TreeNode[k].RchildPosion=p2;
TreeNode[p1].Parent=k;
TreeNode[p2].Parent=k;
TreeNode[p1].TFag=1;//"废除"当次最小权叶子
TreeNode[p2].TFag=2;//"废除"当次次小权叶子
TreeNode[p1].HuffCode=0;//左叶huffcode置0
TreeNode[p2].HuffCode=1;//右叶huffcode置1
}
}
for(i=0;i<2*N-1;i++)
{
cout <<" "<<TreeNode[i].Parent<<endl;
cout << TreeNode[i].LchildPosion<<" "<<TreeNode[i].Data<<" "<<TreeNode[i].RchildPosion<<endl;
cout <<" "<<TreeNode[i].HuffCode<<endl;
/*输出形如 Parent
LCP Data RCP
HuffCode
类型的数据*/
}
return 0;
}
该程序能够编译,但是运行的时候有错误,不能正确运行(windows提示有错误)请高手帮忙解决,小弟不胜感激