示例#1
0
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;
}
示例#2
0
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;
	}
}