Está en la página 1de 16

Arboles de expresión

Integrantes:
Sebastián Díaz Tapias
Víctor Manuel Baena Delgado
Luis David Correo Galván
Luis Ángel Bustamante Herazo
Diego Andrés Aguas Herazo
Arboles de Expresión
Los árboles de expresión son estructuras de datos que definen código. Se
basan en las mismas estructuras que usan los compiladores par analizar
el código y generar un resultado compilado.

Un árbol de expresión sirve para evaluar expresiones como operadores


como operadores (+,-,*,/,%) u operandos de tipo: (a+b)*c/d.
Existes dos características fundamentales para que un árbol represente
una expresión, estas características son:

 Cualquier hoja está etiquetada con un operando


 Cualquier nodo interior n está etiquetado con un operador.
Creación de un árbol de expresión
(a + b) – ((c * d) + e)
-
(a + b) ((c*d)+e)

+ +
(c*d)
a b * e

c d
Características de un árbol de
expresión
La raíz siempre debe ser un operador.
Las hojas siempre deben ser operandos.
Los nodos deben estar etiquetados por operandos.
Si un operador tiene mayor prioridad que la raíz se coloca como hijo.
Si un operador tiene mayor o igual prioridad que un nodo se coloca
como padre.
Un nodo puede contener como hijo otro subárbol que tiene una
pequeña expresión.
Ejemplos:
Notación polaca
La notación polaca, también conocida como notación de prefijo o notación
prefija es una forma de notación para la lógica, la aritmética, el algebra y
la computación. Su característica distintiva es que coloca operadores a la
izquierda de sus operandos.
Para obtener la notación polaca se realiza un recorrido en pre-orden del
árbol de expresión.
A cotización vemos un ejemplo en el cual obtendremos la notación polaca
del siguiente árbol.
Notación polaca ejemplo
((x + 2 * y) 5) /(2*x-3) /
(x + 2 * y) 5) (2*x-3)

(x + 2 * y) 5 2*x
- 3

+ 5 3
4
*
x 2*y x

x * 4 x
2 y

2 y
Notación polaca ejemplo
((x + 2 * y) 5) /(4 * x - 3) /

+ 5 3
*
x * 4 x
En notación polaca:
2 y / +x*2y5-*4x3
A partir de la expresión en notación polaca podemos
recuperar la expresión original. Agrupando los operandos
en paréntesis teniendo la secuencia; operador, elemento,
elemento como se muestra a continuación.
/ +x*2y5-*4x3
/(( x + (2 * y) 5) - * 4 x 3
/ +x*2y5-*4x3 /(( x + (2 * y) 5) – (4 * x) 3
/ + x (2 * y) 5 - * 4 x 3 /(( x + (2 * y) 5) – (4 * x) 3
/ + x (2 * y) 5 - * 4 x 3
/(( x + (2 * y) 5) ((4 * x) – 3)
/ ( x + (2 * y) 5 - * 4 x 3
/(( x + (2 * y) 5) ((4 * x) – 3)
/ ( x + (2 * y) 5 - * 4 x 3
(( x + (2 * y) 5) / ((4 * x) – 3)
/(( x + (2 * y) 5) - * 4 x 3
Notación polaca inversa
La notación polaca inversa, notación de postfijo, o notación posfija, es un
método algebraico alternativo de introducción de datos.
En la notación polaca inversa es al revés: primero están los operandos y
después viene el operador que va a realizar los cálculos sobre ellos. Tanto
la notación polaca como la notación polaca inversa no
necesitan usar paréntesis para indicar el orden de las operaciones,
mientras la aridad del operador sea fija.
Para hallar la notación polaca inversa realizamos un recorrido en Pos-
orden.
Notación polaca inversa
((x + 2 * y) 5) /(4 * x - 3) /

+ 5 3
*
x * 4 x
/-3*x4 5+*y2x
En notación polaca inversa:
2 y
x2y*+5 4x*3-/
A partir de la expresión en notación polaca inversa
podemos recuperar la expresión original. Agrupando los
operandos en paréntesis teniendo la secuencia; elemento,
elemento, operador como se muestra a continuación.

x2y*+5 4x*3-/
((x + (2 * y)) 5) 4 x * 3 - /
x2y*+5 4x*3-/ ((x + (2 * y)) 5) (4 * x) 3 - /
x (2 * y) + 5 4 x * 3 - /
((x + (2 * y)) 5) (4 * x) 3 - /
x (2 * y) + 5 4 x * 3 - /
(( x + (2 * y) 5) ((4 * x) – 3) /
(x + (2 * y)) 5 4 x * 3 - /
(x + (2 * y)) 5 4 x * 3 - / (( x + (2 * y) 5) ((4 * x) – 3) /
(( x + (2 * y) 5) / ((4 * x) – 3)
((x + (2 * y)) 5) 4 x * 3 - /
Árbol de expresión a partir de una pila

Para crear el árbol binario AST (árbol de sintaxis abstracta) que


guardará la expresión posfija se necesita una pila de nodos binarios
(Nodo) que servirá para construir el árbol binario a medida que se
procesan sus elementos. La siguiente figura muestra el proceso general:
El procedimiento para crear el árbol binario AST es el siguiente:

Para cada uno de los caracteres de la expresión postfija hacer lo siguiente:


Si el carácter analizado es un operando (a,b,c,d...), crea un nuevo nodo binario sin hijos que
contenga el carácter y apílalo en la PILA.
Si el elemento analizado es un operador(+,-,*,/) , crea un nuevo nodo binario de la siguiente
manera:
Extrae dos nodos binarios de la PILA.
El primer elemento extraído de la PILA será el hijo DERECHO del nuevo nodo binario.
El segundo elemento extraído de la PILA es el hijo IZQUIERDO del nuevo nodo binario.
El dato que almacenará el nuevo nodo binario será el carácter que representa el operador.
Una vez creado el nuevo nodo binario, apílalo en la PILA.
Por último, devuelve el nodo raíz del árbol binario AST creado y que es precisamente el que se
obtiene de desapilar el único nodo binario restante que queda en la PILA.

Implementa el siguiente método de la clase PostfixExprEvaluator que permite crear el árbol


binario AST a partir de una expresión postfija de acuerdo al anterior procedimiento:
Node createPostfixTree( String sPostfix ) throws Exception
Bibliografía
https://www.google.com/search?q=arboles+de+expresiones+ejemplos&r
lz=1C1UUXU_esCO995CO995&source=lnms&tbm=isch&sa=X&ved=2a
hUKEwjWufyNobP3AhV0bTABHdZkCVgQ_AUoAXoECAEQAw&biw=
748&bih=558&dpr=1#imgrc=RklBnnnmJqZZlM
https://docs.microsoft.com/es-es/dotnet/csharp/expression-trees-
explained
https://www.utm.mx/~jahdezp/archivos%20estructuras/arboles%20con
%20expresiones.pdf
http://www.sites.upiicsa.ipn.mx/estudiantes/academia_de_informatica/es
tructura_y_rd/docs/u3/TRES_3.1.pdf

También podría gustarte