我有一个Node节点,它有Node * left和Node * right作为变量。现在我有一个函数来构建huffman树,如下所示
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节点的新位置分配相同。
答案 0 :(得分:0)
如果你正如你所说,pQueue是一个Node对象的向量(我假设std :: vector - 如果没有,请忽略答案!),通过使用vector :: insert(),你实际上是在添加一个迭代器而不是Node对象。尝试这样的事情:
int x = pQueue.size();
for(int i=0;i<x-1;i++){
Node z;
z.left = &pQueue.extractMin();
z.right = &pQueue.extractMin();
z.setchar(NULL);
z.setfrequency(z.left->getFrequency() + z.right->getFrequency());
pQueue.push_back(z);
}