Nodo* Huffman::crearNodo(int a, int x) { Nodo* nodoNuevo = new Nodo(); nodoNuevo->setFrecuencia(x); nodoNuevo->setNumero(a); nodoNuevo->setHijoDerecho(NULL); nodoNuevo->setHijoIzquierdo(NULL); return nodoNuevo; }
void Huffman::crearArbol(Nodo* nodoActual[], int numeroMaximo) { bool yaEncontrePosicion; int u = 0, posicionInsercion, frecuencia; Nodo* ptr; ordenarNodos(nodoActual, numeroMaximo); for (int n = numeroMaximo; n > 1; n--) { //ordenarNodos(nodoActual,n); u = nodoActual[0]->getFrecuencia() + nodoActual[1]->getFrecuencia(); str = nodoActual[0]->getNumero() + nodoActual[1]->getNumero(); ptr = crearNodo(str, u); ptr->setHijoDerecho(nodoActual[1]); ptr->setHijoIzquierdo(nodoActual[0]); nodoActual[0] = ptr; yaEncontrePosicion = false; posicionInsercion = n - 2; frecuencia = nodoActual[0]->getFrecuencia(); for (int i = 1; i < n - 1; i++) { if (!yaEncontrePosicion && nodoActual[i]->getFrecuencia() > frecuencia) { posicionInsercion = i - 2; yaEncontrePosicion = true; } nodoActual[i] = nodoActual[i + 1]; } for (int j = 0; j < posicionInsercion; j++) { nodoActual[j] = nodoActual[j + 1]; } nodoActual[posicionInsercion] = ptr; } }