資料結構 求節點的哈夫曼的帶權路徑長度

2021-07-07 05:09:23 字數 1669 閱讀 2877

【問題描述】

已知輸入一串正整數,正整數之間用空格鍵分開,請建立乙個哈夫曼樹,以輸入的數字為葉節點,求這棵哈夫曼樹的帶權路徑長度。

【輸入形式】

首先輸入正整數的個數,然後接下來為接下來的正整數,正整數個數不超過10個

【輸出形式】

輸出相應的權值

【樣例輸入】

5 4 5 6 7 8

【樣例輸出】

69求哈夫曼樹的演算法用的是遞迴,然而並不會寫非遞迴的,還要花時間研究一下,這次沒有看清楚輸入的要求,走了,不少的彎路,下次看題目一定要認真啊

#include #include #define maxnum 20

typedef struct btnode btnode, *btree;

typedef struct node node, *forest;

void insertforestnode ( btree t, forest fr, forest head);

void destorybtree ( btree t );

void getwpl( btree t, int depth, int *wpl);

int main()

else

insertforestnode(t,fr,head);

i++;

}//構造哈夫曼樹

while( head->link != null )

free(head);

getwpl(t,0,&wpl);

printf("%d", wpl);

destorybtree(t);

t = null;

return 0;

}void insertforestnode ( btree t, forest fr, forest head )

else

}if( p == null)

q->link = fr;

}//int getwpl ( btree t)

p = stack[top--];

wpl = wpl + p->data*(--depth);

p =} while ( p != null || top != -1 );

// do

//// else

// } while( top != -1);

//// return wpl;

//}void getwpl( btree t, int depth, int *wpl)

else

}//二叉樹的銷毀

void destorybtree ( btree t )

}

經過某同學指點,利用了佇列和按層次遍歷,這下就可以有非遞迴演算法了

先定義乙個結構存有節點位址和其高度

struct depthbuffmantree ;

接著是

//非遞迴演算法

int getwpl2(btree t)

if( p.bt->lchild != null )

if( p.bt->rchild != null )

}return wpl;

}

本文為我本人原創

python 求節點的哈夫曼的帶權路徑長度

問題描述 已知輸入一串正整數,正整數之間用空格鍵分開,請建立乙個哈夫曼樹,以輸入的數字為葉節點,求這棵哈夫曼樹的帶權路徑長度。輸入形式 首先輸入正整數的個數,然後接下來為接下來的正整數,正整數個數不超過10個 輸出形式 輸出相應的權值 樣例輸入 5 4 5 6 7 8 樣例輸出 n list map...

哈夫曼樹 哈夫曼樹求帶權路徑和

首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...

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

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