C/Visual C - Arboles con N ramas (no binarios)

 
Vista:

Arboles con N ramas (no binarios)

Publicado por Arturo S. (1 intervención) el 29/05/2001 07:22:39
Tengo un problemon, creo, lo que necesito son codigos en C/C++ para generar arboles con un nodo principal y varias ramas, pueden ser 3 o hasta 30, y cada rama creada puede ser como el nodo principal (con muchas ramas), No tengo idea de como hacerlo, Por favor ayudenme....

De antemano se los agradezco...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Arboles con N ramas (no binarios)

Publicado por Google (255 intervenciones) el 29/05/2001 19:14:21
Los árboles binarios se hacen con los nodos:
struct {
TInfo *informacion;
TNodo *hijoIzquierdo;
TNodo *hijoDerecho;
} TNodo;

Los árboles n-arios, se hacen con listas. En vez de tener dos punteros a los hijos, tienes una lista de punteros a los hijos.
Si sabes que tus nodos no van a tener más de 30 hijos, puedes ponerlo en un array directamente:

struct {
// ...
TNodo *hijos[30];
} TNodo;

Pero ahí ya debes cuestionarte qué es mejor en cuanto a memoria. Si todos los nodos van a tener 30 hijos,
excepto las hojas, a lo mejor compensa. Si no, es posible que una lista enlazada o algo similar sea más aconsejable.

Espero que te sirva!

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Arboles con N ramas (no binarios)

Publicado por Bleach (29 intervenciones) el 30/05/2001 09:58:51
Como complemento a lo que se ha dicho puedes hacer lo siguiente:

class TNodo
{
public:
TInfo mInfo;
int nhijos;
TNodo **hijos;
TNodo():nhijos(0),hijos(NULL){}
~TNodo(){
if(hijos) {
free(hijos);
}
}
};


Cunado añadas un hijo haces un realloc de hijos y sumas 1 a nhijos, y al *(hijos+nhijos-1) le haces que apunte al nodo hijo,
asi solo tienes los hijos que necesites, vas pidiendo memoria segun lo necesites y en las hojas no hace falta que pidas
memoria para guardar hijos.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar