#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
typedef struct HFT
{
int weight;
int parent, LTree, RTree;
}HFT, *PHFT;
void Select(PHFT HFT, int n, int &s1, int &s2)
{
for(int i = 1; i < n; i++){
if(HFT[i].parent == 0){
s1 = i;
break;
}
}
for(int i = 1; i < n; i++){
if(HFT[i].parent == 0 && HFT[s1].weight > HFT[i].weight)
s1 = i;
}
for(int j = 1; j < n; j++){
if(HFT[j].parent == 0 && j != s1){
s2 = j;
break;
}
}
for(int j = 1; j < n; j++){
if(HFT[j].parent == 0 && HFT[s2].weight > HFT[j].weight && j != s1)
s2 = j;
}
}
void initHFT(PHFT &H, int n)
{
if(n <= 1) return;
int m = 2*n - 1;
H = new HFT[m + 1];
for(int i = 1; i <= m; i++){
H[i].parent = 0;
H[i].LTree = 0;
H[i].RTree = 0;
}
cout << "please input the weight of nodes:" << endl;
for(int i = 1; i <= n; i++)
cin >> H[i].weight;
cout << endl;
for(int i = n + 1; i <= m; i++)
{
int s1, s2;
Select(H, i, s1, s2);
H[s1].parent = i;
H[s2].parent = i;
H[i].LTree = s1;
H[i].RTree = s2;
H[i].weight = H[s1].weight + H[s2].weight;
}
}
void showHFT(PHFT &H, int n)
{
cout << "index weight parent LTree RTree" << endl;
cout << left;
int m = 2*n - 1;
for(int i = 1; i <= m; i++){
cout << setw(5) << i << " ";
cout << setw(6) << H[i].weight << " ";
cout << setw(6) << H[i].parent << " ";
cout << setw(6) << H[i].LTree << " ";
cout << setw(6) << H[i].RTree << " " << endl;
}
}
int main()
{
PHFT HFT;
int n = 0;
cout << "please input the number of nodes: ";
cin >> n;
initHFT(HFT, n);
showHFT(HFT, n);
system("pause");
return 0;
}
哈夫曼树c++代码
最新推荐文章于 2023-08-25 00:04:39 发布