Вы находитесь на странице: 1из 2

rboles de Expresin

Los rboles de expresiones representan el cdigo de nivel del lenguaje en forma de datos. Los datos se almacenan en una estructura con forma de rbol. Cada nodo del rbol de expresin representa una expresin, por ejemplo, una llamada al mtodo o una operacin binaria, como x < y. En la ilustracin siguiente se muestra un ejemplo de una expresin y su representacin en forma de un rbol de expresin. Las diferentes partes de la expresin tienen un color distinto para hacerlas coincidir con el nodo correspondiente del rbol de expresin. Tambin se muestran los diferentes tipos de los nodos del rbol de expresin.

Reglas Para La Construccin De Arboles De Expresin


Para contruir el rbol de expresiones que represente nuestra expresin matemtica es necesario construir primero la misma expresin pero en la notacin polaca correspondiente y a partir de esta es que se construye el rbol. El algoritmo usado para transformar una expresin infija a prefija es explicado a continuacin. Sea A una expresin infija cualquiera, formada por operadores, parntesis (izquierdos y derechos) y operandos, tambin se usar una pila para los operadores. El procedimiento seguido es el siguiente: Se lee un elemento de A, si este es un operador o un parntesis izquierdo, entonces se acta segn la regla I y si es un operando entonces se enva directamente a la expresin de notacin polaca. Si el elemento ledo de A es un parntesis derecho, entonces se desapilarn elementos de la pila de operadores hasta encontrar el correspodiente parntesis izquierdo. Cada elemento desapilado pasa a formar parte de la notacin polaca, excepto los parntesis. Cuando no queden elementos en A, entonces se desapilan operadores de la pila, hasta que esta quede vaca.

Regla I: Existe un orden de prioridad para los operadores, que de menor a mayor es el siguiente: suma (+) y resta (-), multiplicacin (*) y divisin (/), exponenciacin (^), operadores unarios. El parntesis izquierdo lo trataremos como un operador (aunque no lo es) cuyo orden de prioridad es el mayor de todos cuando se quiera apilar y el menor de todos cuando est en la cima de la pila. Cuando se intente apilar algn operador se har lo siguiente: si es un operador unario entonces se apila, si es un operador binario, se comparar su prioridad con el ltimo insertado en la pila (el de la cima), si su prioridad es mayor, entonces se apilar. Si ocurre lo contrario (su prioridad es menor o igual) entonces el operador de la cima de la pila se desapilar y pasar a formar parte de la notacin polaca. Se volver a intentar apilar el operador siguiendo la misma regla, hasta que se pueda apilar, si la pila queda vaca tambin se apila. El parntesis izquierdo siempre se apilar y no

podr ser desapilado por ningn operador y por tanto no formar parte de la notacin polaca inversa. El siguiente ejemplo, ayudar a entender mejor lo dicho anteriomente. Sea la siguiente expresin infija: 2^sin(y+x)ln(x). En la siguiente tabla se muestra paso a paso la conversin a notacin postfija. Se usa el color rojo para sealar los casos en que es necesario desapilar operadores de la pila.

Construccin del rbol binario de expresiones


Una vez obtenida la expresin en notacin postfija, se puede evaluar mediante el uso nuevamente de una pila. Sin embargo, en nuestro caso se trabaja con una rbol binario de expresiones, as que lo que se hace es construir el rbol. El algoritmo usado para construir el rbol no usa como tal la expresin postfija ya conformada, sino que el rbol se va construyendo usando las mismas reglas con las que se construye la notacin postfija, una pila para los operadores y otra para los nodos del rbol, ambas no son necesitadas al terminar el rbol. El algoritmo es el siguiente:

Se siguen las mismas reglas expuestas anteriormente usando la pila de operadores, pero cuando se encuentra un operando o un operador es desapilado, entonces se crea el nodo correspondiente y se acta segn la regla II. Al finalizar el algoritmo solo debe quedar un nodo apilado en la pila de nodos, el que constituye el nodo raz de nuestro rbol de expresiones. Regla II. Si el nodo corresponde a un operando, entonces se apila. Si el nodo corresponde a una operador unario entonces se desapila un nodo de la pila de nodos y es enlazado a la rama izquierda del nodo correspondiente al operador unario y este ltimo es apilado. Si el nodo corresponde a un operador binario entonces dos nodos son desapilados de la pila de nodos, el primero es enlazado a la rama derecha del nodo binario y el segundo a la rama izquierda, nuevamente este nodo es apilado.

Вам также может понравиться