博前感想:
哈夫曼树算是二叉树的应用,有两个难点,一个是创建新的节点,这里面有优化的方法--比如排序的方法可以用快速排序什么的;另外一个难点就是哈夫曼编码了。不说了,上代码
代码块:
#include<iostream>
#include<cmath>
#include<string>
#include<stack>
using namespace std;
typedef struct Htree
{
int weight;
char data;
int huf;
int depth;
Htree *lc, *rc, *parent, *next,*pre;
string s;
}htree, *htr;
htr root;
int x = 0;
int y = 0;
//string ch1 = ""; //全局变量初始化
void create(htr &h, int &(n)) //一开始创建的结构体数目,并且把它们从小到大排序,不适合用冒泡
{ //一开始就想错了,结构体是不能随便交换位置的,只需更新结构体中的数据即可
htr current, original;
current = new Htree;
original = current; //original为初始的位置
h = current;
cout << "请输入第1个结构体的字母和权重:" << endl;
cin >> current->data >> current->weight;
current->lc = NULL; current->rc = NULL;
current->parent = NULL;
current->next = NULL; current->pre = NULL;
for (int i = 1; i <= n - 1; i++)
{
current->next = new Htree;
current->next->pre = current; // 形成双向链表
current = current->next;
cout << "请输入第" <<