AUXILIO ARBOLES N-ARIOS
Publicado por JUAN (1 intervención) el 12/07/2002 20:56:42
TENGO UNA ASIGNACIÒN PARA LA CREACIÒN DE UN PROGRAMA UTILIZANDO ARBOLES N-ARIOS Y NO CONSIGO INFORMACIÒN AL RESPECTO NISIQUIERA EN LA RED
Valora esta pregunta


0
#include <stdio.h>
#include <stdlib.h>
typedef struct Nodo {
int valor;
struct Nodo** hijos; // Puntero a un arreglo de nodos hijos
int numHijos; // Número de hijos
} Nodo;
Nodo* crearNodo(int valor, int n) {
Nodo* nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
nuevoNodo->valor = valor;
nuevoNodo->hijos = (Nodo**)malloc(n * sizeof(Nodo*)); // Reserva espacio para n hijos
nuevoNodo->numHijos = 0; // Inicialmente no tiene hijos
return nuevoNodo;
}
void agregarHijo(Nodo* padre, Nodo* hijo) {
padre->hijos[padre->numHijos] = hijo; // Agrega el hijo al arreglo
padre->numHijos++; // Incrementa el contador de hijos
}
void recorrerArbol(Nodo* nodo) {
if (nodo == NULL) return;
printf("%d ", nodo->valor); // Procesa el nodo actual
for (int i = 0; i < nodo->numHijos; i++) {
recorrerArbol(nodo->hijos[i]); // Recurre a los hijos
}
}
int main() {
Nodo* raiz = crearNodo(1, 3); // Crea la raíz con hasta 3 hijos
Nodo* hijo1 = crearNodo(2, 3);
Nodo* hijo2 = crearNodo(3, 3);
Nodo* hijo3 = crearNodo(4, 3);
agregarHijo(raiz, hijo1);
agregarHijo(raiz, hijo2);
agregarHijo(raiz, hijo3);
printf("Recorrido del árbol: ");
recorrerArbol(raiz); // Debería imprimir: 1 2 3 4
// Liberar memoria (no olvides hacerlo en un programa real)
free(hijo1->hijos);
free(hijo1);
free(hijo2->hijos);
free(hijo2);
free(hijo3->hijos);
free(hijo3);
free(raiz->hijos);
free(raiz);
return 0;
}