You are on page 1of 3

1

rboles rboles con expresiones con expresiones


Estructura de Datos Estructura de Datos
n4
n2
n1
n5 n6
n3
n7
*
+ +
a b a c
rbol de expresiones
con etiquetas
Expresiones con rboles Expresiones con rboles
Expresiones con rboles Expresiones con rboles
En la lmina anterior n1,n2, n3, ,n7 son los nombres de En la lmina anterior n1,n2, n3, ,n7 son los nombres de
los nodos los nodos
Las reglas para representar una expresin mediante un Las reglas para representar una expresin mediante un
rbol etiquetado son estas: rbol etiquetado son estas:
! ! 1. Cada hoja est etiquetada con un operando y slo 1. Cada hoja est etiquetada con un operando y slo
consta de ese operando. Por ejemplo el nodo n4 consta de ese operando. Por ejemplo el nodo n4
representa la expresin a. representa la expresin a.
! ! 2. Cada nodo interior n est etiquetado con un operador. 2. Cada nodo interior n est etiquetado con un operador.
Supngase que n est etiquetado con el operador binario Supngase que n est etiquetado con el operador binario
x, como +o *, y que el hijo izquierdo de n representa la x, como +o *, y que el hijo izquierdo de n representa la
expresin E1, y el hijo derecho la expresin E2. Entonces n expresin E1, y el hijo derecho la expresin E2. Entonces n
representa la expresin (E1) representa la expresin (E1)x(E2 x(E2). Los parntesis se ). Los parntesis se
pueden quitar si no son necesarios. pueden quitar si no son necesarios.
! ! Por ejemplo, el nodo n2 tiene el operador +como etiqueta, Por ejemplo, el nodo n2 tiene el operador +como etiqueta,
y sus hijos izquierdo y derecho representan las y sus hijos izquierdo y derecho representan las
expresiones a y b, respectivamente. Por tanto, n2 expresiones a y b, respectivamente. Por tanto, n2
representa (a)+(b), o ms simple, representa (a)+(b), o ms simple, a+b a+b. El nodo n1 . El nodo n1
representa ( representa (a+b a+b)*( )*(a+c a+c), puesto que * es la etiqueta de n1, y ), puesto que * es la etiqueta de n1, y
a+b a+b y y a+c a+c son las correspondientes expresiones son las correspondientes expresiones
representadas por n2 y n3. representadas por n2 y n3.
Expresiones con rboles Expresiones con rboles
B
sen
Y
+
+
q
A
Z
C
X
*
q(A +B), sen ( C ), X * ( Y +Z )
Expresiones con rboles Expresiones con rboles
OTRO EJ EMPLO:
! ! En la anterior figura se mostr una expresin y su En la anterior figura se mostr una expresin y su
representacin de rbol. representacin de rbol.
! ! Un recorrido general del rbol en orden previo ( Un recorrido general del rbol en orden previo (preorden preorden) )
produce la cadena produce la cadena q+ABsenC*X+YZ q+ABsenC*X+YZ. sta es la versin . sta es la versin
prefija de la expresin. prefija de la expresin.
! ! El recorrido general de orden produce la cadena El recorrido general de orden produce la cadena
AB+CsenXYZ+*q AB+CsenXYZ+*q, la cual es la versin , la cual es la versin posfija posfija de la de la
expresin. expresin.
Expresiones con rboles Expresiones con rboles
2
B
*
A
D
*
C
+
+
E
Orden Previo: +* A B +* C D E
En Orden: A * B +C * D +E
Orden Posterior: A B * C D * E ++
Expresiones con rboles Expresiones con rboles
E
*
C
D
+
*
A
+
B
Orden Previo: +* A B +* C D E
En orden: A B * C D * E ++
Orden Posterior: B A D C E * +* +
Expresiones con rboles Expresiones con rboles
! ! En este ejemplo se pretende evaluar una expresin cuyos En este ejemplo se pretende evaluar una expresin cuyos
operandos son todos constantes. Primero declararemos al nodo operandos son todos constantes. Primero declararemos al nodo
rbol. rbol.
#define #define OPERADOR 0 OPERADOR 0
#define #define OPERANDO 1 OPERANDO 1
struct struct nodoarbol nodoarbol{ {
short short int int utype utype; /*operador u operando*/ ; /*operador u operando*/
union union{ {
char char opera[10]; opera[10];
float float val val; ;
} } info info; ;
struct struct nodoarbol nodoarbol *hijo; *hijo;
struct struct nodoarbol nodoarbol * *sig sig; ;
}; };
typedef typedef nodoarbol nodoarbol *NODOPTR; *NODOPTR;
Expresiones con rboles Expresiones con rboles
! ! Suponiendo que contamos con una funcin llamada Suponiendo que contamos con una funcin llamada apply(p apply(p), la ), la
cual acepta un apuntador a un rbol de expresiones que contiene cual acepta un apuntador a un rbol de expresiones que contiene
un operador nico y sus operandos numricos, y retorna el un operador nico y sus operandos numricos, y retorna el
resultado de aplicar el operador a sus operandos. resultado de aplicar el operador a sus operandos.
! ! Ahora bien, se presenta un procedimiento recursivo reemplaza que Ahora bien, se presenta un procedimiento recursivo reemplaza que
acepta un apuntador a un rbol de expresin y sustituye el rbol acepta un apuntador a un rbol de expresin y sustituye el rbol
con un nodo de rbol que contiene el resultado numrico de la con un nodo de rbol que contiene el resultado numrico de la
evaluacin de la expresin evaluacin de la expresin
void void reemplaza(NODOPTR reemplaza(NODOPTR p) p)
{ {
float float valor; valor;
NODEPTR q, r; NODEPTR q, r;
Expresiones con rboles Expresiones con rboles
if(p if(p- -> >utype==OPERADOR utype==OPERADOR){ //el rbol tiene un operador ){ //el rbol tiene un operador
q = p q = p- ->hijo; >hijo; //como su //como su raiz raiz
while(q while(q! !=NULL =NULL) )
reemplaza(q reemplaza(q); //reemplaza ); //reemplaza
q = q q = q- -> >sig sig; ;
} //fin de } //fin de while while
//aplicar el operador en la raz a los //aplicar el operador en la raz a los
//operandos en los subrboles //operandos en los subrboles
valor=apply(p valor=apply(p); );
//sustituir el operador por resultado //sustituir el operador por resultado
p p- -> >utype=OPERANDO utype=OPERANDO; ;
p p- -> >val=valor val=valor; ;
//liberar todos los subrboles //liberar todos los subrboles
q = p q = p- ->hijo; >hijo;
p p- ->hijo = NULL; >hijo = NULL;
while(q while(q! !=NULL =NULL){ ){
r = q; r = q;
q = q q = q- -> >sig sig; ;
free(r free(r); );
} //fin de } //fin de while while
} //fin de } //fin de if if
} //fin de reemplaza } //fin de reemplaza
! ! La funcin La funcin evalua_arbol evalua_arbol se escribe de modo siguiente: se escribe de modo siguiente:
float float evalua_arbol(NODOPTR evalua_arbol(NODOPTR p) p)
{ {
NODOPTR q; NODOPTR q;
reemplaza(p reemplaza(p); );
return(p return(p- -> >val val) )
free(p free(p); );
} }
Expresiones con rboles Expresiones con rboles
3
bibliografia bibliografia
! ! Estructura de Datos y Algoritmos Estructura de Datos y Algoritmos
Alfred Alfred V. V. Aho Aho, , J hon J hon E. E. Hopcroft Hopcroft, , J effrey J effrey D.Ullman D.Ullman
! ! Estructura de Datos en C y C++ Estructura de Datos en C y C++
Tenenbaum Tenenbaum, , Langsam Langsam, , Augenstein Augenstein

You might also like