【发布时间】:2013-02-27 12:05:07
【问题描述】:
我有一个 Node *left 和 Node *right 作为变量的类 Node。现在我有一个函数来构建哈夫曼树,如下所示
int x = pQueue.size();
for(int i=0;i<x-1;i++){
Node *z = new Node;
z->left = &pQueue.extractMin();
z->right = &pQueue.extractMin();
z->setchar(NULL);
z->setfrequency(z->left->getFrequency() + z->right->getFrequency());
pQueue.insert(z);
}
这是创建霍夫曼树的标准函数。然而问题是这样的。最初,当创建一个新的 Node* z 并分配其左右子节点时,在循环的下一次执行期间,z 的左右子节点被重新分配,并且我丢失了最初分配的值。我的印象是,在每次执行循环期间,都会创建新对象,并且其左右子对象将具有不同的内存位置。但这并没有发生。每次循环执行时如何创建一个新对象??
这是我得到的
如果您检查频率为 14 的节点在第一次执行中分配了一些内存位置作为其左右子节点。但是在下一次执行中,频率 14 节点的左右子节点为空,频率 25 节点的子节点设置为先前的位置。我希望它们在第一轮中分配给频率 14 节点和频率 25 节点的新位置。
【问题讨论】:
-
给出一个预期结果和你得到的结果的样本?
-
我刚刚添加了图片和我的期望
-
pQueue的类型是什么? -
pQueue 是 Node 对象的向量。
-
stl 向量?没有 extractMin 成员函数
标签: c++ object loops memory huffman-code