ht的parent值怎么写

1.哈夫曼编码器#include "stdio.h"#include "stdlib.h"#include "string.h" typedef struct{ char ch; unsigned int weight; unsigned int parent, lchild, rchild; } HTNode;//哈夫曼树类型定义(用一维数组表示) typedef HTNode HuffmanTree[100]; //假设树最多100个结点//存放哈夫曼编码的变量类型定义(用两维字符数组) typedef char HuffmanCode[100][100];//假设最多100个字符,每个字符编码最多100位 void select(HuffmanTree HT, unsigned int n, unsigned int *s1,unsigned int *s2) { unsigned int flag=1000;/*设一个权值最大值*/ unsigned int i,minweight; minweight=flag; for(i=1;i<=n;i++) {/*查找parent为0,权值最小的结点,把序号记入s1中*/ if(HT[i].parent==0 && HT[i].weight HT[i].weight=w[i-1]; HT[i].lchild=0; HT[i].rchild=0; HT[i].parent=0; } //初始化非叶结点 for(i=n+1; i<=m;++i) { HT[i].weight=0; HT[i].lchild=0; HT[i].rchild=0; HT[i].parent=0; } for(i=n+1;i<=m;++i){ /*建哈夫曼树*/ /*在HT[1..i-1]中选择parent为0且weight最小的两个结点,其序号为s1和s2*/ select(HT, i-1, &s1,&s2); HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; }/*//////////////////////////////////////////////////////////////*//*从叶子到根求每个字符的哈夫曼编码*/ for(i=1;i<=n;++i)//对每个叶结点 { j=1;//计数,也作下标 parent=HT[i].parent;//求其父结点 child=i;//记下孩子结点 while(parent!=0)//不是树根 { if(HT[parent].lchild==child)//是父结点的左孩子? code[j]='0'; //编码为0 else //是右孩子 code[j]='1'; //编码为1 j++; child=parent;//新孩子 parent=HT[parent].parent;//新的父结点 } for(k=0;k2.哈夫曼树HT存储结构的初态和末态怎么写定义哈夫曼树与编码的存储结构与数据类型
typedef struct
{
char data;//节点值
int weight; //权重
int parent; //双亲节点
int lchild; //左孩子节点
int rchild; //右孩子节点
} HTNode;
typedef struct
{
char cd[N]; //存放哈夫曼码
int start;
} HCode;
void CreateHT(HTNode ht[],int n) //创建哈夫曼树
void CreateHCode(HTNode ht[],HCode hcd[],int n) //根据哈夫曼树计算每个元素的哈夫曼编码
void DispHCode(HTNode ht[],HCode hcd[],int n) //输出每个元素的哈夫曼编码
3.哈夫曼编码的C语言源代码原发布者:丁丁的23号