程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 數據結構-構造哈夫曼樹的小問題

數據結構-構造哈夫曼樹的小問題

編輯:編程綜合問答
構造哈夫曼樹的小問題

完整程序在這裡:http://wenku.baidu.com/view/dde580a9376baf1ffc4fadbf

template
class HfmTree :public BinaryTree
{
public:
operator T()const { return weight; }
T getW(){ return weight; }
void putW(const T& x){ weight = x; }
void SetNull(){ root = NULL; }
int CreateHfmTree(T w[], int n);
private:
T weight;
};

template
int HfmTree ::CreateHfmTree(T w[], int n)
{
PrioQueue > pq(n);
HfmTree x, y, z, zero;

for (int i = 0; i<n; i++){

z.MakeTree(w[i], x, y);
z.putW(w[i]);//////////////////////////////
pq.Append(z);
z.SetNull();///////////////////////////////
}

for (int i = 1; i<n; i++){
pq.Serve(x);
pq.Serve(y);
z.MakeTree(x.getW() + y.getW(), x, y);
z.putW(x.getW() + y.getW());/////////////////
cout<<z<<endl; /////////////////////////////
pq.Append(z);
z.SetNull(); //////////////////////////////////
}
pq.Serve(z);
z.PreOrder(Visit);
return z;
}

問題:
1.為什麼兩個for循環 每次都要執行z.SetNull(); ?

2.z.putW(w[i]); 每次循環都會給weight付一個值,但每次循環完一次後都會覆蓋掉前一個weight,那麼為什z.MakeTree(x.getW() + y.getW(), x, y)中 x.getW() 和 y.getW()還能識別出來呢?
3.為什麼cout<<z<<endl; 能夠執行? 對象 也能夠被打印?

圖片說明

最佳回答:


你給的鏈接裡面沒有看到“cout<<z<<endl; ”這一句。

qq_29529895
a1193561652
qq_29529895
a1193561652
qq_29529895
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved