【問題描述】
已知輸入一串正整數,正整數之間用空格鍵分開,請建立乙個哈夫曼樹,以輸入的數字為葉節點,求這棵哈夫曼樹的帶權路徑長度。
【輸入形式】
首先輸入正整數的個數,然後接下來為接下來的正整數,正整數個數不超過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年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...