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