Estoy creando un Huffman Tree y para hacerlo empecé haciendo un Min Heap. El montón está configurado y funciona ordenando los valores por frecuencia en el documento, pero mi problema surge cuando trato de comenzar a crear el árbol.C++ Huffman Tree and Pointers
Estoy sacando los dos elementos principales del montón y poniendo un nodo encima de ellos y reinsertándolo en el montón. El montón está basado en una matriz, por lo que no toca los punteros * izquierdo y * derecho de los nodos. Cuando el montón se reduce a un solo nodo, sin embargo, tanto los punteros de nodo izquierdo como derecho son nulos, así que creo que puede ser un problema con mis punteros ...? Soy nuevo en C++ de Java para dar mis tontos errores.
while(theHeap.getheapSize() > 1)
{
Node top;
Node *min1=new Node(theHeap.topandPop());
Node *min2=new Node(theHeap.topandPop());
top.left=min1;
top.right=min2;
top.freq=min1->freq+min2->freq;
theHeap.insert(top);
}
Node r=theHeap.topAndPop(); //null pointers for left and right children
--------------------------------------
//code for heap. arr is in the header file is Node *arr;
void Heap::insert(Node c)
{
if (heapSize != arrSize)
{
heapSize=heapSize+1;
arr[heapSize - 1] = c; //does this call copy constructor???
percolateUp(heapSize - 1);
}
}
void Heap::percolateUp(int nodeIndex) {
int parentIndex;
Node tmp;
if (nodeIndex != 0)
{
parentIndex = getParentPos(nodeIndex);
if (arr[parentIndex].freq > arr[nodeIndex].freq)
{
tmp = arr[parentIndex];
arr[parentIndex] = arr[nodeIndex];
arr[nodeIndex] = tmp;
percolateUp(parentIndex);
}
}
}
¿Ha considerado usar 'std :: priority_queue' para el montón? –
Es una tarea de tarea y no tenemos permitido usar la biblioteca estándar. – Westin
Solo para asegurarse de que: 'top' quede fuera del alcance, así que con suerte 'insert()' llama a un constructor de copia en lugar de solo tomar una dirección? – Reinderien