我有一个 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 节点的新位置。