• 您現在的位置是:首頁 >生活 > 2023-08-10 06:45:09 來源:

    哈夫曼樹的帶權路徑長度怎么求(哈夫曼樹)

    導讀 大家好,我是小華,我來為大家解答以上問題。哈夫曼樹的帶權路徑長度怎么求,哈夫曼樹很多人還不知道,現在讓我們一起來看看吧!1、#includ...

    大家好,我是小華,我來為大家解答以上問題。哈夫曼樹的帶權路徑長度怎么求,哈夫曼樹很多人還不知道,現在讓我們一起來看看吧!

    1、#include#include #define MAXSIZE 30/*自定義哈夫曼的最大個數*/ typedef struct { int weight;/*結點的權值*/ int parent;/*結點的雙親*/ int lchild;/*結點的左孩子*/ int rchild;/*結點的右孩子*/ int flag;/*是否用過的標志*/ }HufmTree; int p1,p2;/*定義全局下標數字,用于Select()函數返回當前哈夫曼樹中最小 兩個未用的結點/森林的下標*/ void CreatHuffman(HufmTree tree[] ,int n );/*構造哈夫曼樹函數*/ void Select(HufmTree tree[] ,int i );/*選擇最小兩個森林的函數*/ void DisplayTree(HufmTree tree[],int Number);/*輸出哈夫曼樹函數*/ void main() { int InputNumber;/*輸入森林結點的個數*/ printf("******本程序用于演示哈夫曼樹的構造結果***** "); HufmTree mytree[MAXSIZE];/*聲名一個棵哈夫曼樹*/ printf("請輸入結點個數: "); scanf("%d",&InputNumber); CreatHuffman( mytree,InputNumber );//構造哈夫曼樹 DisplayTree(mytree,InputNumber);//輸出哈夫曼樹 } /*-------------------------------------------- *函數功能:構造哈夫曼樹 *函數參數:自定義構造體,結構體數組 *函數返回值:沒有 --------------------------------------------*/ void CreatHuffman(HufmTree tree[] ,int n ) { int i,m; if(n<=1)/*森林個數小于或等于一退出*/ { return; } m=2*n;/*所建哈夫曼樹最后結點的最大個數-1*/ for(i=1;itree[j].weight))/*跳過于用過的結點(用過后不是森*/ { /*林中的結點)*/ MinValue1=tree[j].weight;/*如果后面森林的結點值比MinValue1小*/ p1=j; /*P1就指向它*/ } } tree[p1].flag=1;/*把tree[p1]從森林中去掉,它已經用過*/ /*也為了p1 p2 不為同一個值*/ for( i=1;tree[i].flag!=0;i++)/*找到前中tree[i]沒有個的第一個結點*/ { /*找到森林中的一個結點*/ } MinValue2=tree[i].weight;/*把找到的結點當做最小的結點*/ p2=i;/*第二小值結點的下標值*/ for(j=i+1;j<=number;j++) { if((tree[j].flag!=1)&&(MinValue2>tree[j].weight))/*跳過于用過的結點(用過后不是森*/ { /*林中的結點)*/ MinValue2=tree[j].weight;/*如果后面森林的結點值比MinValue1小*/ p2=j; /*P1就指向它*/ } } } /*-------------------------------------------- *函數功能:輸出哈夫曼樹 *函數參數:參數1 自定義構造體,結構體數組。

    2、 * 參數2 輸入結點的個數 *函數返回值:沒有 --------------------------------------------*/ void DisplayTree(HufmTree tree[],int Number) { for(int i=1;i<2*Number;i++) { printf("%5d",tree[i].weight); } printf(" "); for(i=1;i<2*Number;i++) { printf("HufmTree[%2d].parent=%3d ",i,tree[i].parent);//輸出當前元素的parent值 printf("HufmTree[%2d].weight=%3d ",i,tree[i].weight);//輸出當前元素的weight值 printf("HufmTree[%2d].lchild=%3d ",i,tree[i].lchild);//輸出當前元素的lchild值 printf("HufmTree[%2d].rchild=%3d ",i,tree[i].rchild);//輸出當前元素的rchild值 } }。

    本文到此講解完畢了,希望對大家有幫助。

  • 成人app