Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Consulta sobre Arboles

Estas en el tema de Consulta sobre Arboles en el foro de C/C++ en Foros del Web. Hola a todos! Tengo que entregar una asignacion en la cual "Dado un entero N y N expresiones aritméticas expresadas en notación prefija, postfija o ...
  #1 (permalink)  
Antiguo 12/12/2015, 16:09
 
Fecha de Ingreso: diciembre-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Consulta sobre Arboles

Hola a todos!

Tengo que entregar una asignacion en la cual "Dado un entero N y N expresiones aritméticas expresadas en notación prefija, postfija o infija, dar el resultado de evaluar dicha expresión y encuentre la altura"

Todo me va perfecto hasta que intento encontrar la altura.

La entrada del ejemplo es:

2
*+234
((2+1)-5)+(5*3)

y la salida deberia ser

Expresión 1:
Evaluación: 20
Notación Postfija: 23+4*
Altura: 2

Yo estoy usando para calcular la altura:
Código C++:
Ver original
  1. int Altura(Nodo *t)
  2.     {
  3.     int a,b;
  4.     if (t->hijo_izq == NULL && t->hijo_der == NULL)
  5.          return 1;
  6.     else
  7.     {
  8.         a=Altura(t->hijo_izq);
  9.         b= Altura(t->hijo_der);
  10.         if (a<b) return b+1;
  11.         else return a+1;
  12.      
  13.     }
  14.      
  15.     };

y para el llamado desde el main:

(parte del codigo post)

Código C++:
Ver original
  1. Nodo *a=post.obtener_raiz(), *auxiliar = post.obtener_raiz();
  2.             post.evaluar_res(a); a = post.obtener_raiz();
  3.             cout<<"Evaluacion: "<<*(a->res)<<endl;
  4.             cout<<"Notacion prefija: ";
  5.             post.preOrden(auxiliar);
  6.             cout<<"Altura: " ;
  7.                         post.Altura(auxiliar);


La salida me da:

Expresión 1:
Evaluación: 20
Notación Postfija: 23+4*

y no tengo ni idea de que pasa...Me podrian ayudar?

Gracias!
  #2 (permalink)  
Antiguo 12/12/2015, 16:28
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Consulta sobre Arboles

Y qué sucede si la parte derecha es nula y la izquierda no? Intentas acceder a los hijos de la parte derecha, nodo que apunta a null, con lo que accedes a memoria no valida. Y si es la parte izquierda la que es nula pero el nodo derecho no lo es? Pues más de lo mismo.

Intenta hacer las funciones con un sólo return. Son más sencillas de depurar.

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 12/12/2015, 16:57
 
Fecha de Ingreso: diciembre-2011
Mensajes: 21
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta sobre Arboles

Vale! Muchas gracias!

Etiquetas: arboles, c++, recorrido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:57.