Huffman编码 构造函数问题

大二数据结构上机题,做的事Huffman树编码,压缩和解压的问题
代码如下:
#pragma once
#include "HuffmanNode.h"
#include "MinHeap.h"
using namespace std;
template < typename T, typename E >
class HuffmanTree
{
private:
HuffmanNode* root;
public:
HuffmanTree(E node[], int n);
virtual ~HuffmanTree() { delete[]root; }
void mergeTree(HuffmanNode* htl, HuffmanNode* htr, HuffmanNode* parent);
void deleteTree(HuffmanNode* root);
};

template < typename T, typename E >
HuffmanTree::HuffmanTree(E node[], int n)
{
MinHeap> heap(n);
HuffmanNode* parent = NULL, firstChild = NULL, *secondChild = NULL;
HuffmanNode
nodeList = new HuffmanNode[n];
for (int i = 0; i < n; i++)
{
nodeList[i].info = node[i].info;
nodeList[i].weight = node[i].weight;
nodeList[i].parent = nodeList[i].leftChild = nodeList[i].rightChild = NULL;
heap.insert(nodeList[i]);
}
for (int i = 0; i < n - 1; i++)
{
parent = new HuffmanNode();
firstChild = &heap.removeMin();
secondChild = &heap.removeMin();
mergeTree(firstChild, secondChild, parent);
heap.insert(*parent);
}
this->root = parent;
delete[]nodeList;
}
template < typename T, typename E >
void HuffmanTree::mergeTree(HuffmanNode* htl, HuffmanNode* htr, HuffmanNode* parent)
{
parent->leftChild = htl;
parent->rightChild = htr;
parent->parent = NULL;
parent->weight = htl->weight + htr->weight;
htl->parent = htr->parent = parent;
return;
}
template < typename T, typename E >
void HuffmanTree::deleteTree(HuffmanNode* root)
{
if (root != 0)
{
deleteTree(root->leftChild);
deleteTree(root->rightChild);
delete root;
}
}
在构造函数中,第二个循环mergeTree(36行左右)之后,检查leftChild,rightChild以及parent都没有问题。但是在调用最小堆的插入之后,parent的rightChild就变成了parent自己,不知道为什么。
也就是说,比如是1 2 3 4,最小堆弹出1和2,形成一个左1右2、自己为3的结点。但是在heap.insert(*parent)之后,这个结点的rightChild本来应该还是2的变成了指向自己的指针。
求指教!
如果代码本身有什么问题,也请各位大神多多指教!