ÁRBOLES DE EXPRESION

12
ÁRBOLES DE EXPRESION

description

ÁRBOLES DE EXPRESION. Un árbol de expresión sirve para evaluar expresiones del tipo: (a+b)*c/d. Para que un árbol represente una expresión se deben tomar en cuenta 2 características muy importantes: Cualquier hoja está etiquetada sólo con un operando. - PowerPoint PPT Presentation

Transcript of ÁRBOLES DE EXPRESION

Page 1: ÁRBOLES DE EXPRESION

ÁRBOLES DE EXPRESION

Page 2: ÁRBOLES DE EXPRESION

Un árbol de expresión sirve para evaluar expresionesdel tipo:

(a+b)*c/d

Para que un árbol represente una expresión se deben tomar en cuenta 2 características muy importantes:

• Cualquier hoja está etiquetada sólo con un operando.

• Cualquier nodo interior n está etiquetado por un operador.

Page 3: ÁRBOLES DE EXPRESION

Por ejemplo, para representar una expresion el arbolquedaria como sigue:

a+(b-c)*d/c

+

/a

c*

- d

cb

Page 4: ÁRBOLES DE EXPRESION

Otro ejemplo:

(a+b)*(c+d)*

++

a b d c

Page 5: ÁRBOLES DE EXPRESION

Al introducir la expresión debemos de tomar en cuenta las siguientes características:

La raíz siempre debe ser un operador Las hojas siempre deben ser operandos Los nodos deben estar etiquetados por operadores Si un operador tiene mayor prioridad que la raiz se

coloca como hijo. Si un operador tiene igual o menor prioridad que un

nodo se coloca como padre. Un nodo puede contener como hijo otro subarbol que

contiene un pequeña expresion.

Page 6: ÁRBOLES DE EXPRESION

En los árboles de expresión, la sucesión del preorden de etiquetas nos da lo que se conoce como la forma prefijo de una expresión

Análogamente, la sucesión postorden de las etiquetas de un árbol expresión nos da lo que se conoce como la representación postfijo de una expresión

Finalmente, el inorden de una expresión en un árbol de expresión nos da la expresión infijo en sí misma, pero sin paréntesis

Page 7: ÁRBOLES DE EXPRESION

CONSTRUCCION DE UN ARBOL DE EXPRESION

Agoritmo:Mientras carácter diferente de nuloLeer carácter de la listaSi es paréntesis pasar al siguiente carácterCrear un nodo nuevo que contenga ese carácterSi el carácter que tiene nuevo es un:Operando

si el árbol esta vacío hacer raíz a nuevosi no recorrer el árbol por la derecha hasta llegar a un nodo con hojas

si la hoja izquierda, no esta etiquetada colocar operandosi no colocarlo en la hoja derecha.

Operadorsi la raíz es un operando

insertar nuevo en ese nodo, y convertir el operandoen el hijo izq.

si nosi hay un paréntesis abierto

insertar nuevo en la ultima hoja derecha y colocar operandocomo hijo izquierdo

Page 8: ÁRBOLES DE EXPRESION

Si no se cumple ninguna de las condiciones anterioressi la raíz es de igual prioridad o menor prioridad

convertir la raíz en el hijo izq. de nuevoelsesi la prioridad del nodo raíz es mayor al de nuevoinsertar nuevo como hijo derecho y colocar el nodo reemplazadocomo hijo izquierdo.

si el carácter anterior es paréntesis izquierdosi el sig. carácter es paréntesis derecho

si solo hay un operador en el árbolnuevo se convierte en raíz

si nose inserta en el ultimo nodo derecho, y el nodo se convierte en hijo izquierdo.

Page 9: ÁRBOLES DE EXPRESION

EVALUACION DE UN ARBOL DE EXPRESIÓN

Para que un árbol de expresión sea evaluado cada nodo debe ser declarado como sigue:

# define OPERADOR 0# define OPERANDO 1struct nodarbol{ short int tipo; //OPERADOR U OPERANDO// union{ char operador[10]; float val;}info;struct nodarbol *izq;struct nodarbol *der;};

typedef nodarbol *NODEPTR;

Page 10: ÁRBOLES DE EXPRESION

Debido a que un nodo puede contener información que es un numero (operando) o una cadena de caracteres (operador), la parte de información del nodo es un componente de union de la estructura.

Para realizar la función evalúa necesitamos de una función que denominaremos apply(p), la cual acepta un apuntador a un árbol de expresión que contiene un operador único y sus operándos numéricos, y retorna el resultado de aplicar el operador a sus operándos.

La función evalua servirá para que reciba un apuntador a un árbol de expresión y sustituye el árbol con un nodo de árbol que contiene el resultado numérico de la evaluación de la expresión.

Page 11: ÁRBOLES DE EXPRESION

void evalua(NODEPTR raiz){ float value; NODEPTR aux; evalua(aux->izq);

evalua(aux->der);apply(aux);

}

Función evalua

Page 12: ÁRBOLES DE EXPRESION

La función evalúa árbol quedaría;

float evalarbol(NODEPTR raiz){

evalua(raiz);

return (raiz->val);

free(raiz);

}