完整程序在這裡: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; ”這一句。