Está en la página 1de 5

WIKI - ÁRBOLES DE EXPRESIONES

Los árboles de expresiones son estructuras de datos que definen código. Se basan en
las mismas estructuras que usa un compilador para analizar el código y generar el
resultado compilado.

Los árboles binarios se utilizan para almacenar expresiones aritméticas en memoria,


esencialmente en compiladores de lenguajes de programación. Una expresión es una
secuencia de tokens (componentes de léxicos que siguen unas reglas establecidas).
Un token puede ser un operando o bien un operador.
Los paréntesis no se almacenan en el árbol pero están implicados en la forma del
árbol, como puede apreciarse en la Figura.

Un árbol de expresión es un árbol binario con las siguientes propiedades: 


1. Cada hoja está operando. 
2. Los nodos raíz y los nodos internos son operadores. 
3. Los subárboles son subexpresiones cuyo nodo raíz es un operador.

 Los árboles binarios se utilizan para representar expresiones en memoria,


esencialmente en compiladores de lenguajes de programación. Se observa que los
paréntesis de la expresión no aparecen en el árbol, pero están implicados en su forma,
y esto resulta muy interesante para la evaluación de la expresión.

Si se supone que todos los operadores tienen dos operandos, se puede representar
una expresión mediante un árbol binario cuya raíz contiene un operador y cuyos
subárboles izquierdo y derecho son los operando izquierdo y derecho,
respectivamente. Cada operando puede ser una letra (x, y, a, b, etc.) o una
subexpresión representada como un subárbol. 

El nodo raíz del subárbol izquierdo contiene el operador (+) de la subexpresión


izquierda y el nodo raíz del subárbol derecho contiene el operador (-) de la
subexpresión derecha. Todos los operandos letras se almacenan en nodos hojas. 
Los árboles de expresiones representan el código de nivel del lenguaje en forma de
datos. Los datos se almacenan en una estructura con forma de árbol. Cada nodo del
árbol de expresión representa una expresión.

CONSTRUCCIÓN DE UN ÁRBOL DE EXPRESIÓN


 Algoritmo:
Mientras carácter diferente de nulo
Leer carácter de la lista
Si es paréntesis pasar al siguiente carácter
Crear un nodo nuevo que contenga ese carácter
Si el carácter que tiene nuevo es un:

Operando
si el árbol está vacío hacer raíz a nuevo
si no recorrer el árbol por la derecha hasta llegar a un nodo con hojas
si la hoja izquierda, no está etiquetada colocar operando
si no colocarlo en la hoja derecha.

Operador
si la raíz es un operando
insertar nuevo en ese nodo, y convertir el operando
en el hijo izq.
sí no
si hay un paréntesis abierto
insertar nuevo en la última hoja derecha y colocar operando
como hijo izquierdo

si el carácter anterior es paréntesis izquierdo


si el sig. carácter es paréntesis derecho
si solo hay un operador en el árbol
nuevo se convierte en raíz
sí no
se inserta en el último nodo derecho, y el nodo se convierte
en hijo izquierdo.

Si no se cumple ninguna de las condiciones anteriores


si la raíz es de igual prioridad o menor prioridad
convertir la raíz en el hijo izq. de nuevo
else
si la prioridad del nodo raíz es mayor al de nuevo
insertar nuevo como hijo derecho y colocar el nodo reemplazado
como hijo izquierdo.

Recorridos de árboles (en inorden, preorden y


postorden)

Recorrido InOrden
En este método de recorrido, primero se visita el subárbol izquierdo, luego la raíz y
luego el subárbol derecho. Siempre debemos recordar que cada nodo puede
representar un subárbol en sí mismo.
Si un árbol binario se recorre en orden , la salida producirá valores clave ordenados en
orden ascendente.

Partimos de una , y siguiendo el recorrido en orden, nos movemos a su subárbol


izquierdo B . B también se atraviesa en orden. El proceso continúa hasta que se
visitan todos los nodos. La salida del recorrido en orden de este árbol será:
D→B→E→A→F→C→G

Algoritmo
Hasta que se atraviesen todos los nodos :
Paso 1: atraviesa recursivamente el subárbol izquierdo.
Paso 2: visita el nodo raíz.
Paso 3: atraviesa recursivamente el subárbol derecho.
Recorrido PreOrden
En este método de recorrido, primero se visita el nodo raíz, luego el subárbol izquierdo
y finalmente el subárbol derecho.

Partimos de una , y siguiendo el recorrido de pre-orden, primero visitamos Un sí y


luego pasamos a su subárbol izquierdo B . B también es un pedido anticipado
atravesado. El proceso continúa hasta que se visitan todos los nodos. La salida del
recorrido de la reserva de este árbol será:
A→B→D→E→C→F→G

Algoritmo
Hasta que se atraviesen todos los nodos :
Paso 1: visite el nodo raíz.
Paso 2: atraviesa de forma recursiva el subárbol izquierdo.
Paso 3: atraviesa recursivamente el subárbol derecho.
Recorrido postOrden
En este método de recorrido, el nodo raíz se visita en último lugar, de ahí el nombre.
Primero atravesamos el subárbol izquierdo, luego el subárbol derecho y finalmente el
nodo raíz.

Partimos de una , y siguiendo el recorrido posterior a la orden, primero visitamos el


subárbol izquierdo B . B también se atraviesa después del pedido. El proceso continúa
hasta que se visitan todos los nodos. La salida del recorrido posterior al pedido de este
árbol será:
D→E→B→F→G→C→A

Algoritmo
Hasta que se atraviesen todos los nodos -
Paso 1: atraviesa recursivamente el subárbol izquierdo.
Paso 2: atraviesa recursivamente el subárbol derecho.
Paso 3: visita el nodo raíz.

También podría gustarte