Pascal/Turbo Pascal - necesito ayuda con arboles

 
Vista:

necesito ayuda con arboles

Publicado por Ivan (3 intervenciones) el 07/01/2008 19:07:47
Hola, que tal, no suelo ser yo mucho de pedir ayuda ya que me gusta resolver mis practicas pero he de pediros ayuda desesperadamente ya que despues de volverme loco mil veces no he conseguido otra cosa que estar un poco mas calvo y sin ningun algoritmo. El enunciado es el siguiente:

-Sea un arbol binario (no necesariamente de busqueda) que almacena en sus nodos pesos, siendo <peso> un numero entero entre 1 y 10. El peso total de un arbol se define como la suma de los pesos de todos sus nodos. Se dice que un arbol binario es ponderado si para todo nodo se cumple que el peso total de sus 2 subarboles no difiere en mas de 10 unidades. Escriba un programa en pascal que permita detectar si un arbol binario es ponderado.

Necesito que alguien me heche una mano y me escriba este algoritmo que no consigo sacar ni loco, me vuelvo loco con las llamadas recursivas ya que debe devolver el peso diferencia total del arbol y un booleano que diga si es o no ponderado.
A ver si algun valiente se atreve y me hecha una mano, que no tiene ni idea de cuanto se lo voy a agradecer.Ademas tengo hasta mañana a las 9 de la noche para presentarlo.Muchas gracias de antemano a todo el que pueda ayudarme.
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:necesito ayuda con arboles

Publicado por que sueñooooo!! (2 intervenciones) el 25/01/2008 11:21:26
bueno la verdad es que son las 8 de la mañana cai aca de casualidad y se me dio por hacerlo...es una posible solucion, aunque se puede hacer de otra forma un poco mas reducida, te paso esta que a pesar de la poca onda que le puse, se entiende la idea, que es lo importante....
aah, tampoco le hice un test, asi que a provarlo, si es que todavia te interesa y/o lo llegas a ver....
Empieza abajo no??

Procedure Recorrer_ramas_y_sumar(A:arbol; var x:integer);
Begin
if (A<>nil) and (x<10) then {si en algun momento se pasa, ya no sirve}
begin
x:=x + A^.dato;
Recorrer_ramas(A^.izq,x);
Recorrer_ramas(A^.der,x);
end;
End;


Function Recorrer_SubArbol(A:arbol):boolean;
Var
izq,der:integer;
Begin
if (A<>nil) then
begin
izq:=0; der:=0;
Recorrer_ramas_y_sumar(A^.izq,izq);
Recorrer_ramas_y_sumar(A^.der,der);
if ((der+izq)<=10) then
Recorrer_SubArbol:=true
else
Recorrer_SubArbol:=false
end
Recorrer_SubArbol:=true; {para el caso de una hoja}
End;

Procedure Ponderado(A:arbol; var si:boolean);
Var
ok:boolean;
Begin
ok:=true;
if (A<>nil) and (si) then
begin
Ponderado(A^.izq,si);
ok:=Recorrer_SubArbol(A);
if (ok) then
Ponderado(A^.der,si)
else
si:=ok;
end;
si:=ok;
End;
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:necesito ayuda con arboles

Publicado por que sueñooooo!! (2 intervenciones) el 25/01/2008 11:22:27
bueno la verdad es que son las 8 de la mañana cai aca de casualidad y se me dio por hacerlo...es una posible solucion, aunque se puede hacer de otra forma un poco mas reducida, te paso esta que a pesar de la poca onda que le puse, se entiende la idea, que es lo importante....
aah, tampoco le hice un test, asi que a provarlo, si es que todavia te interesa y/o lo llegas a ver....
Empieza abajo no??

Procedure Recorrer_ramas_y_sumar(A:arbol; var x:integer);
Begin
if (A<>nil) and (x<10) then {si en algun momento se pasa, ya no sirve}
begin
x:=x + A^.dato;
Recorrer_ramas(A^.izq,x);
Recorrer_ramas(A^.der,x);
end;
End;


Function Recorrer_SubArbol(A:arbol):boolean;
Var
izq,der:integer;
Begin
if (A<>nil) then
begin
izq:=0; der:=0;
Recorrer_ramas_y_sumar(A^.izq,izq);
Recorrer_ramas_y_sumar(A^.der,der);
if ((der+izq)<=10) then
Recorrer_SubArbol:=true
else
Recorrer_SubArbol:=false
end
Recorrer_SubArbol:=true; {para el caso de una hoja}
End;

Procedure Ponderado(A:arbol; var si:boolean);
Var
ok:boolean;
Begin
ok:=true;
if (A<>nil) and (si) then
begin
Ponderado(A^.izq,si);
ok:=Recorrer_SubArbol(A);
if (ok) then
Ponderado(A^.der,si)
else
si:=ok;
end;
si:=ok;
End;
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:necesito ayuda con arboles

Publicado por ivan (3 intervenciones) el 25/01/2008 16:08:43
gracias de todas formas , pero ya se me paso el tiempo para entregarla y al final la saque yo mismo, un poco mas sencillo que lo tuyo y en un solo procedimiento, eso si bastante largo. Gracias de todas formas.
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