求C語言C 高手賜教額關於哈夫曼樹的程式急求一定要可以執行的噢

時間 2021-10-17 02:35:56

1樓:

/*說實話,哈夫曼樹的編碼有點難度,這個**是我花了三四個小時寫的,

不能完全滿足你的要求,但是可以進行哈夫曼編碼,你試著向你題目的要求改一下吧。*/

#include

#include

#define n 5

#define m 2*n-1

typedef struct hf_node

htnode;

typedef struct node

*btree;

typedef htnode huffmant[m];

bool is_empty(btree root)

void visit(btree root) //訪問二叉樹的結點

void print(huffmant t) //以陣列的形式輸出哈夫曼樹

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

}void create_ht(huffmant t) //建立哈夫曼樹

void inorder(btree root) //以中序遍歷二叉樹

}void postorder(btree root)

以後序遍歷刪除二叉樹

root=0; //為了防止指標出現錯誤,最好加上

}void hf_preorder(huffmant t,int i) //哈夫曼樹的所有內節點都有兩個孩子,都經過擴充,先序遍歷

cout<

i=t[i].lchild;

hf_preorder(t,i);

i=t[i].parent; //訪問完左子樹之後通過其雙親結點訪問其右兄弟,必須通過雙親結點才能找到右兄弟

i=t[i].rchild; //因為i=t[i].lchild使i的值不斷變化,且回溯後不能變為遞迴之前的狀態

hf_preorder(t,i);

}void hf_inorder(huffmant t,int i) //中序遍歷

i=t[i].lchild;

hf_inorder(t,i);

i=t[i].parent; //必須在此處找到雙親結點

cout<

i=t[i].rchild; //因為i已經為雙親結點,所以不必找雙親結點了

hf_inorder(t,i);

}void hf_postorder(huffmant t,int i) //後序遍歷

i=t[i].lchild;

hf_postorder(t,i);

i=t[i].parent; //必須在此處找到雙親結點

i=t[i].rchild; //通過雙親結點找到右兄弟

hf_postorder(t,i);

i=t[i].parent; //左右結點都訪問結束後訪問雙親結點,再找雙親結點

cout<

}void huffmancode(huffmant t) //構造哈弗曼編碼

cout<

void main()

2樓:手機使用者

我已經發給你了哦·~~

高手進來看看C語言c,求高手解釋下 C語言 C 語言 C 語言的區別?及年代背景?

我修改成c語言的了,並且能編譯通過了,可以執行了只是,執行的結果,對不對,我沒有驗證。include include void data double a,int x,int m,int n break case 25 演算法同上 for y i 2 y i 2 y break a i j sum ...

求助C語言高手!!C語言小問題,求指教!!

要原始碼還是要程式,等下發!c語言課程設計。一 設計專案 設計一個學生成績管理系統,該系統包括兩個大部分 1 學生基本情況錄入與查詢 包括學號 姓名 2 學生成績錄入與查詢 成績包括語文 數學 英語共3科 查詢包括各人的成績 最高最低平均分 名次 全班的總分 二 設計要求 1 採用c語言 vc 程式...

求c語言高手c080是什麼意思,求C語言高手 c 0x80是什麼意思

ox是隻十六進位制數字。就是10進位制的128 這個問題是沒有必要求教c高手的!c語言中的a 0x80是什麼意思 董俊錕 是按位與運算 ox表示十六進位制數 關於按位與運算,先要將其他的進位制數轉化為二進位制數,然後計算ox80轉化為二進位制就是10000000 比如a是十進位制數15,轉化為二進位...