資料結構 哈夫曼樹

2021-09-10 06:08:46 字數 2185 閱讀 9768

博前感想:

哈夫曼樹算是二叉樹的應用,有兩個難點,乙個是建立新的節點,這裡面有優化的方法--比如排序的方法可以用快速排序什麼的;另外乙個難點就是哈夫曼編碼了。不說了,上**

**塊:

#include#include#include#includeusing namespace std;

typedef struct htree

htree, *htr;

htr root;

int x = 0;

int y = 0;

//string ch1 = ""; //全域性變數初始化

void create(htr &h, int &(n)) //一開始建立的結構體數目,並且把它們從小到大排序,不適合用冒泡

current->next = original;//; null //構成迴圈鍊錶,current->next是第乙個結構體

current->next->pre = current; //形成雙向鍊錶

//cout << current->next->data;

htr next = original;// = original->next;

htr temp1; //定義乙個臨時指標

char ch;

int temp2;

for (int j = 0; j < n; j++)

else //要交換的是結構體本身,而不是指標

}original = original->next; //外層迴圈多一次剛好可以讓original指向第乙個結構體

} //h = temp2;

h = original; //original這是指向第乙個結構體

//cout << original->data << " " << original->weight << endl; //測試建立的結構體沒有問題,應該是交換的迴圈出了問題

cout << "排序後的鍊錶為:" << endl;

for (int k = 0; k < n; k++) }

void createnode(htr &h, int n) //這裡h用&的話,值可以在別的地方公用,互通。

//t = t->next;

while(root->weight >= t2->weight) //這裡應該要有乙個迴圈

else}}

} h = h->next->next;

//cout << h->weight << " " << endl;

//cout << root->weight <<" "<< endl; 輸出root的值沒有出現錯誤

} h = root;

//#region測試語句

//cout << h->weight << endl;

//cout << h->lc->weight << endl;

//cout << h->rc->weight << endl;

//cout << h->rc->lc->weight << endl;

//cout << h->rc->lc->weight << endl;

//#endregion

}void preorder(htr h) //先序遍歷新構成的樹,檢驗是否正確

preorder(h->lc);

preorder(h->rc); }

root->s = "";

}string sq = "";

string sq_temp = "";

//int depth = 0;

htr w = null;

htr q = null;

void huf(htr h,string sq)

if (h->lc != null)

if (h->rc != null) }

int main()

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

資料結構 哈夫曼樹

哈夫曼樹是二叉樹的一種。被稱為最優二叉樹。實際應用中最重要的是帶權路徑長度。樹的路徑長度 樹中每個結點的路徑長度之和。權 附加在樹節點上,表示出現的概率。樹的帶權路徑長度 所有葉子結點帶權長度之和。看例項 的結點路徑長度 從d到 a的路徑,共走了兩條邊,所以為2。樹中的葉子結點有 d,e和 f。結點...