qq_29529895 2015-08-16 05:44 采纳率: 50%
浏览 1849
已采纳

构造哈夫曼树的小问题

完整程序在这里: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; 能够执行? 对象 也能够被打印?

图片说明

  • 写回答

1条回答 默认 最新

  • 纵横车 2015-08-16 06:27
    关注

    你给的链接里面没有看到“cout<<z<<endl; ”这一句。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用matlab 实现通信仿真
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件