1 / 12

ÁRBOLES DE EXPRESION

Á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.

violet
Download Presentation

ÁRBOLES DE EXPRESION

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ÁRBOLES DE EXPRESION

  2. 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. • Cualquier nodo interior n está etiquetado por un operador.

  3. + / a * c - d b c Por ejemplo, para representar una expresion el arbol quedaria como sigue: a+(b-c)*d/c

  4. Otro ejemplo: (a+b)*(c+d) * + + a b c d

  5. 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.

  6. 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

  7. CONSTRUCCION DE UN ARBOL DE EXPRESION Agoritmo: 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 esta 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 esta 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. si no si hay un paréntesis abierto insertar nuevo en la ultima hoja derecha y colocar operando como hijo izquierdo

  8. 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 si no se inserta en el ultimo 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.

  9. 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 1 struct nodarbol{ short int tipo; //OPERADOR U OPERANDO// union{ char operador[10]; float val; }info; struct nodarbol *izq; struct nodarbol *der; }; typedef nodarbol *NODEPTR;

  10. 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.

  11. Función evalua void evalua(NODEPTR raiz){ float value; NODEPTR aux; evalua(aux->izq); evalua(aux->der); apply(aux); }

  12. La función evalúa árbol quedaría; float evalarbol(NODEPTR raiz){ evalua(raiz); return (raiz->val); free(raiz); }

More Related