Anda di halaman 1dari 37

ARBOLES

1
ARBOLES

1. Definición.
2. Conceptos Generales.
3. Arboles Binarios.
3.1 Definición.
3.2 Implementación.
3.3 Recorrido.
3.4 Árboles Binarios de Búsqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.
3.5 Árboles de Expresión.
o Construcción.
o Evaluación.
1. Ejemplos

2
. Definición.
. Conceptos Generales.
. Arboles Binarios.

Arbol: Estructura que organiza sus elementos,


denominados nodos, en forma jerárquica

B C

D E F G H

I J K L

3
. Definición.
. Conceptos Generales.
. Arboles Binarios.

4
. Definición.
. Conceptos Generales.
. Arboles Binarios.

( ( A + B ) / ( C – D) ) * ( E - F )

/ -

+ - E F

A B C D

5
. Definición.
. Conceptos Generales.
. Arboles Binarios.

Un ÁRBOL es una colección de elementos A


llamados nodos, uno de los cuales se
distingue del resto como RAIZ.
B C
Cualquier nodo, a excepción de la raíz, está
conectado, por arriba, a un único nodo. Se D E F G H
dice entonces que B es Padre de E y E es
Hijo de B.
I J K L
Si un nodo tiene algún hijo es un nodo
Interno, sino es una Hoja o Nodo Terminal

Rama es cualquier camino que se establece


entre la raíz y un nodo terminal.

Nodos Hermanos son nodos hijos de un


mismo padre.

6
. Definición.
. Conceptos Generales.
. Arboles Binarios.

Grado de un nodo: numero de hijos que A


salen del nodo. Los nodos con grado cero “0”
son nodos terminales
B C
Grado del árbol: el número de hijos que
tiene el elemento con más hijos dentro del D E F G H
árbol o sea el máximo grado de todos los
nodos del árbol
I J K L

Nivel: se define para cada elemento del árbol


como la distancia a la raíz, medida en nodos.
El nivel de la raíz es cero y el de sus hijos
uno. Así sucesivamente. En el ejemplo, 'B'
tiene nivel 1, 'G' tiene nivel 2, y 'K', nivel 3.

Altura: la altura de un árbol se define como el nivel del nodo de mayor nivel. Como cada
nodo de un árbol puede considerarse a su vez como la raíz de un árbol, también
podemos hablar de altura de ramas. El árbol del ejemplo tiene altura 3, la rama 'B' tiene
altura 2, la rama 'H' tiene altura 1, la 'G' cero, etc.
7
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.

Definición: un árbol binario es un conjunto Raiz


finito de nodos que puede estar vacío o A
consistir en un nodo raíz y dos árboles
binarios disjuntos, llamados subárbol B C
izquierdo y subárbol derecho.
SubArbol SubArbol
Izquierdo Derecho

A A A

B B B

C C C

8
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IMPLEMENTACION DE LISTAS SIMPLES
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
Lista 101
struct tipo_datos : INFO
{ char nombre[20]; 124
int cedula, edad; 125 SIG (151)
};
typedef tipo_ datos tipo_info 151
: INFO
struct tipo_nodo 174
{ tipo_info Info; 175 SIG (201)
tipo_nodo * Sig;
};
201
: INFO
typedef tipo_nodo* pt_nodo; 224
225 SIG (301)
pt_nodo Lista;
301
: INFO
324
325 SIG (NULL)

9
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IMPLEMENTACION DE ARBOLES
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
RAIZ 101
struct tipo_datos :
INFO
{ char nombre[20]; 124 Izq (151)
int cedula, edad; 125 Der (201)
};
typedef int
tipo_
TipoInfo
datos TipoInfo 151
INFO
:
struct TipoNodo 174 Izq (301)
{ TipoInfo Info; 175 Der(NULL)
TipoNodo * Izq, *Der;
};
201
INFO
:
typedef TipoNodo* PtNodo; 224 Izq (NULL)
225 Der (NULL)
PtNodo RAIZ;
301
INFO
:
324 Izq (NULL)
325 Der (NULL)

10
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.

5 6 10 12 14 20 22 28 30 31 33 35 50 65 88

Lineal 5 S 6 S 10 S 12 S 14 S 65 S 88 S

I 28 D
Jerárquica
I 20 D I 33 D

6 D
I 12 I 22 D I 31 D I 65 D

6 D
I 10 6 D
I 14 I 30 D I 50 D I 88 D

I 6 D

I 5 D
11
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
I 28 D

I 20 D I 33 D

I 12
6 D I 22 D I 31 D I 65 D

I 10
6 D I 14
6 D I 30 D I 50 D I 88 D

I 6 D
28
I 5 D
20 33

12 22 31 65

10 14 30 50 88

22

22 12
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
28

20 33

12 22 31 65

10 14 30 50 88

(1) nodo - subárbol izquierdo - subárbol derecho


N
(2) subárbol izquierdo - nodo - subárbol derecho
(3) subárbol izquierdo - subárbol derecho - nodo
(4) nodo - subárbol derecho - subárbol izquierdo
(5) subárbol derecho - nodo - subárbol izquierdo I D
(6) subárbol derecho - subárbol izquierdo - nodo
13
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.

N
(1) nodo - subárbol izquierdo - subárbol derecho

PRE - ORDEN I D

N
(2) subárbol izquierdo - nodo - subárbol derecho

IN - ORDEN I D

N
(3) subárbol izquierdo - subárbol derecho - nodo

POST - ORDEN I D

14
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IN - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17

25 8

4 12 20 32

1 6 10

1 4 6 25 10 12 17 20 8 32
15
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. PRE - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17

25 8

4 12 20 32

1 6 10

17 25 4 1 6 12 10 8 20 32
16
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. POST - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17

25 8

4 12 20 32

1 6 10

1 6 4 10 12 25 20 32 8 17
17
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion.

17

25 8

4 12 20 32

1 6 10

PRE 17 25 4 1 6 12 10 8 20 32
IN 1 4 6 25 10 12 17 20 8 32
POST 1 6 4 10 12 25 20 32 8 17
18
3. ARBOLES BINARIOS
Dados los recorridos, dibujar el ABB que los
3.1 Definicion.
3.2 Implementacion. genera:
3.3 Recorrido. In_Orden: 4,11,39,49,51,58,73,80,86,90 -
3.4 Arboles Binarios de Busqueda
(ABB). Pre_Orden: 39,4,11,90,58,49,51,80,73,86
3.5 Arboles de Expresion.

N N
39
I D I D
IN - ORDEN PRE - ORDEN
4,114 90
49,51,58,73,80,86,90

NULL 11 49,51,58,73,80,86
58 NULL

49
49,51 80
73,80,86

NULL 51 73 86

19
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion.
void RecInorden(PtNodo RAIZ)
{ if(RAIZ!=NULL)
Recorrido INORDEN.- { RecInorden (RAIZ->Izq);
cout<<RAIZ->Info;
RecInorden (RAIZ->Der);
}
void RecPreorden(PtNodo RAIZ) }
{ if(RAIZ!=NULL)
{ cout<<RAIZ->Info;
RecPreorden (RAIZ->Izq); Recorrido PREORDEN.-
RecPreorden (RAIZ->Der);
}
}
void RecPostorden(PtNodo RAIZ)
{ if(RAIZ!=NULL)
{ RecPostorden (RAIZ->Izq);
RecPostorden (RAIZ->Der);
Recorrido POSTORDEN.- cout<<" "<<RAIZ->Info;
}
}

20
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion. 17
void RecInorden(PtNodo RAIZ)
{ if(RAIZ!=NULL) 25 8
{ RecInorden (RAIZ->Izq);
cout<<RAIZ->Info; 4 12 20 32
RecInorden (RAIZ->Der);
1 6 10
}
}

RecIn(17) RecIn(25) RecIn(4) RecIn(1) RecIn(Null)


cout<<17 cout<<25 cout<<4 cout<<1
RecIn(8) RecIn(12) RecIn(6) RecIn(Null)
RecIn(20) RecIn(10) RecIn(Null)
cout<<8 cout<<12 cout<<6
RecIn(32) RecIn(Null) RecIn(Null)
RecIn(Null) RecIn(Null)
cout<<20 cout<<10
RecIn(Null) RecIn(Null)
RecIn(Null)
cout<<32
RecIn(Null)
21
3. ARBOLES BINARIOS
3.1 Definición.
3.2 Implementación.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion.

Un Arbol Binario de Búsqueda (ABB) es aquel que, para cualquier nodo del
arbol (N) se cumple que, todos los nodos del sub-árbol izquierdo son menores
que N->Info, mientras que los nodos del sub-árbol derecho son mayores que N-
>Info

17

14 25

4 16 20 32

1 6 15

22
3.4 Arboles Binarios de Búsqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. TipoNodo * Izq, *Der;
};
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;

NULL
NULL
Info

Der
RAIZ->Izq=NULL;

17
Izq
RAIZ->Der=NULL;
return 0;
}
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
23
3.4 Arboles Binarios de Busqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. Elem=14 TipoNodo * Izq, *Der;
};
RAIZ=RAIZ->Izq
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;

NULL
NULL
RAIZ->Izq=NULL;

17
d2
RAIZ->Der=NULL;
return 0;
d2
}

NULL
NULL
Info

Der
Izq
14
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
24
3.4 Arboles Binarios de Busqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. Elem=25 TipoNodo * Izq, *Der;
};
RAIZ=RAIZ->Der
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;

NULL
RAIZ->Izq=NULL;

17
d2
d3
RAIZ->Der=NULL;
return 0;
d2 d3
}

NULL
NULL

NULL
NULL
Info
Info

Der

Der
Izq

Izq
14

25
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
25
3.4 Arboles Binarios de Busqueda (ABB).
o Insercion de un nodo.
o Busqueda de un nodo.
o Eliminacion de un nodo.

PtNodo BUSCAR(PtNodo RAIZ, TipoInfo ELEM)


{ if(RAIZ!=NULL)
{ if(RAIZ->Info==ELEM) return RAIZ;
else if(ELEM < RAIZ->Info) return BUSCAR(RAIZ->Izq,ELEM);
else return BUSCAR(RAIZ->Der,ELEM);
}
else return NULL;
}
17

14 25

4 16 20 32

1 6 15

BUSCAR(RAIZ,20) BUSCAR(RAIZ->Der,20) BUSCAR(RAIZ->izq,20)

RETURN(RAIZ)
26
3.4 Arboles Binarios de Busqueda (ABB). PtNodo BUSCAR(PtNodo RAIZ, TipoInfo ELEM)
o Insercion de un nodo. { if(RAIZ!=NULL)
{ if(RAIZ->Info==ELEM) return RAIZ;
o Busqueda de un nodo.
else if(ELEM < RAIZ->Info)
o Eliminacion de un nodo. return BUSCAR(RAIZ->Izq,ELEM);
else return BUSCAR(RAIZ->Der,ELEM);
Raiz }
else return NULL;
d1 }
17 d2d3

d2 d3
14 d4d5 25 d6d7

d4 d5 d6 d7
4 d8d9 16 d10N 20 N N 32 N N

d8 d9 d10
1 N N 6 N N 15 N N

BUSCAR(RAIZ, 20) BUSCAR(RAIZ->Der, 20)


if(17==20) return RAIZ; if(25==20) return RAIZ;
else if(20 < 17) return BUSCAR(RAIZ->Izq,20); else if(20 < 25) return BUSCAR(RAIZ->Der->Izq,20);
Raiz->Der->Izq;
else return BUSCAR(RAIZ->Der,20);
Raiz->Der->Izq;

BUSCAR(RAIZ->Der->Izq, 20)
if(20==20) return RAIZ->Der->Izq;

27
3.4 Arboles Binarios de Busqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.

Esta operación es una extensión de la operación de búsqueda aunque es mas


complicada debido a que se debe mantener la estructura de árbol binario después de
eliminar el nodo. Esto quiere decir que el árbol resultante, para cualquier nodo del árbol
(N), los nodos de su lado izquierdo deben ser menores y los del lado derecho deben ser
mayores, que el contenido del nodo N.

Los pasos a seguir son:


1. Buscar la posición (dirección) del nodo a eliminar.
2. Si el nodo tiene menos de dos hijos:
Reasignar el puntero del nodo padre, al hijo del nodo o a NULL si el nodo no tiene
hijos

Borrar 16
17
Borrar 1 14 PADRE
PADRE 25
4 16
15 20 32

1 6 15 HIJO
28
3.4 Arboles Binarios de Busqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.

Los pasos a seguir son:


1. Buscar la posición (dirección) del nodo a eliminar.
2. Si el nodo tiene menos de dos hijos:
Reasignar el puntero del nodo padre, al descendiente del nodo o a NULL si el nodo
no tiene hijos
3. Si el nodo tiene dos hijos.
Reemplazar el contenido del nodo a eliminar (N), con el mayor de los menores o
con el menor de los mayores.

Borrar 34
70
34
28
Menor de los menores
Mayor mayores = 70
28
18 90

6 25 70 100

20 28

29
3.4 Arboles Binarios de Busqueda (ABB). void ELIM(PtNodo &R, TipoInfo X)
o Inserción de un nodo. { PtNodo Q;
if(R==NULL) cout<<"NO EXISTE VALOR";
o Búsqueda de un nodo.
else if(X<R->Info) ELIM(R->Izq,X);
o Eliminación de un nodo. else if(X>R->Info) ELIM(R->Der,X);
else
R { Q=R;
if(Q->Der==NULL) R=Q->Izq;
d1
else if(Q->Izq==NULL) R=Q->Der;
34 I D else REEMP(Q->Izq,Q);
delete(Q); }
}
d2 d3
void REEMP(PtNodo &P, PtNodo &Q)
18 d4d5
N 90 N d6 { if(P->Der!=NULL) REEMP(P->Der,Q);
Q else
d4 d5 d6 { Q->Info=P->Info;
Q=P;
6 N N 25 d7d8 100 N N
P=P->Izq; }
}
d7 d8
20 N N 28 N N

Paso Elim(R,X) R X RInfo


0 Elim(d1,6) d1 6 34
1 Elim( d1 Izq, 6) d1 Izq 6 18
2 Elim( d2 Izq, 6) d2 Izq 6 6
3 Q=R
d2 Izq=NULL
delete(Q) 30
3.4 Arboles Binarios de Busqueda (ABB). void ELIM(PtNodo &R, TipoInfo X)
o Inserción de un nodo. { PtNodo Q;
if(R==NULL) cout<<"NO EXISTE VALOR";
o Búsqueda de un nodo.
else if(X<R->Info) ELIM(R->Izq,X);
o Eliminación de un nodo. else if(X>R->Info) ELIM(R->Der,X);
else
R { Q=R;
if(Q->Der==NULL) R=Q->Izq;
d1
else if(Q->Izq==NULL) R=Q->Der;
34 I D else REEMP(Q->Izq,Q);
Q delete(Q); }
}
d2 d3
void REEMP(PtNodo &P, PtNodo &Q)
18 d4d5
N 90 N d6 { if(P->Der!=NULL) REEMP(P->Der,Q);
else
d4 d5 d6 { Q->Info=P->Info;
Q=P;
6 N N 25 d7d8 100 N N
P=P->Izq; }
}
d7 d8
20 N N 28 N N

Paso Elim(R,X) R X RInfo


0 Elim(d1,90) d1 90 34
1 Elim( d1 Der, 90) d1 Der 90 90
2 Q=R
R=d1 Der=d6
delete(Q)
31
3.4 Arboles Binarios de Busqueda (ABB). void ELIM(PtNodo &R, TipoInfo X)
o Inserción de un nodo. { PtNodo Q;
if(R==NULL) cout<<"NO EXISTE VALOR";
o Búsqueda de un nodo.
else if(X<R->Info) ELIM(R->Izq,X);
o Eliminación de un nodo. else if(X>R->Info) ELIM(R->Der,X);
else
R { Q=R;
if(Q->Der==NULL) R=Q->Izq;
d1
else if(Q->Izq==NULL) R=Q->Der;
34 I D else REEMP(Q->Izq,Q);
delete(Q); }
}
d2 d3
void REEMP(PtNodo &P, PtNodo &Q)
18 d4d5 90 N d6 { if(P->Der!=NULL) REEMP(P->Der,Q);
else
{ Q->Info=P->Info;
d4 d5 d6
Q=P;
6 N N 25 d7d8 100 N N
P=P->Izq; }
Q }
d7 d8
20 N N 28 N N
Paso ELIM(R,X) P Q R X RInfo
0 ELIM(d1,34) d1 d1 34 34
1 REEMP( d1 Izq, d1) d1 Izq=d2 d1
2 REEMP( d2 Der, d1) d2 Der=d5 d1
3 REEMP( d5 Der, d1) d5 Der=d8 d1
4 Q  Info = P  Info o sea d1  Info = d8  Info
Q=P o sea Q = d8
P = P Izq o sea d5 Der = NULL

32
3.5 Arboles de Expresion. Los árboles binarios se utilizan para representar/evaluar
o Construcción. expresiones. Las expresiones contienen básicamente operadores y
o Evaluación. operandos, se puede representar por un árbol binario donde la raíz
contiene el operador y los subárboles izquierdo/derecho contienen
los operandos. Cada operando puede ser una variable (A…Z) o una
subexpresión representada por un subárbol.

A* ( ( B + C ) / D ) + (E - F)
OPERADOR
+

A* ( ( B + C ) / D )

A* ( ( B + C ) / D )
*
OPERANDO
A*((B+C)/D) OPERANDO
(E - F)

A (B+C)/D
/ E F

B+C
+ D

B C

33
3.5 Arboles de Expresion.
o Construcción.
o Evaluación. La evaluación de una expresión usando árboles binarios tiene
tres pasos:
1. Transformar la expresión de In_Fija a Post_Fija.
2. Construir a partir de la expresión en Post_Fija el Arbol de
Expresión.
3. Evaluar la expresión utilizando el árbol construido.

Construcción del árbol a partir de la expresión Post_Fija


El algoritmo sigue los siguientes pasos:
1. Se lee la expresión de izquierda a D7
derecha, carácter por carácter. D3
I * D6
D
AB+CD-*
2. Si carácter leído es operando (A..Z), PILA
se crea el nodo y se guarda su
D3 D6
dirección en una pila.
I
D1 + D
D2 I
D4 - D
D5
3. Si carácter es operador, se crea el
nodo para el operador, y se conectan
los punteros izq/der con las D1 D4 D5
direcciones extraídas de la pila. D2
D4
D6
I A D I C D D1
D3
D7
4. Se mete en la pila la dirección del
nodo que contiene el operando
D2 D5
I B D I D D

34
3.5 Arboles de Expresion.
o Construcción.
o Evaluación.
PtNodoAr CrearNodo(PtNodoAr Izq, PtNodoAr Der, TInfoAr Elem)
{ PtNodoAr Aux;
Aux=new(TipoNodo);
Aux->Info=Elem; ALGORITMO:
Aux->Izq=Izq; 1. Se lee la expresión de izquierda a
Aux->Der=Der; derecha, carácter por carácter.
return Aux;
2. Si carácter leído es operador
}
(A..Z), se crea el nodo y se guarda
PtNodoAr CrearArbol(PtNodoEx Exp) su dirección en una pila.
{ PtNodoAr A1=NULL,A2=NULL,A3=NULL;
PtNodoPi P; 3. Si carácter es operando se extraen
while(Exp!=NULL) los dos últimos nodos de la pila, se
{ if(isalpha(Exp->Info)) crea el nodo para el operando, y
{ A3=CrearNodo(NULL,NULL,Exp->Info); se conectan los punteros izq/der
PUSH(P,A3); } con las direcciones extraídas de la
else pila.
4. Se mete en la pila la dirección del
{ POP(P,A2);
nodo que contiene el operando
POP(P,A1);
A3=CrearNodo(A1,A2,Exp->Info);
PUSH(P,A3); }
Exp=Exp->Sig;
}
POP(P,A3);
return A3;
}
35
3.5 Arboles de Expresion.
o Construcción.
o Evaluación. Raiz d1

float EVAL(PtNodoAr R)
* d2d3

{ float op1, op2, val;


TInfoAr car;
d2 d3
while(R!=NULL)
{ if(isalpha(R->Info)) + d4d5 - d6d7
{ cout<<R->Info<<" = ";
cin>>val;
return val; d4 d5 d6 d7
} A NN B NN E NN F N N
else
{ op1=EVAL(R->Izq);
op2=EVAL(R->Der);
switch(R->Info) EVAL(d1)
{ case '+':
return op1+op2; op1 = A
EVAL(d2)
+B
case '-':
return op1-op2; EVAL(d2)
case '*': op1 = AEVAL(d4)
return op1*op2; op2 = BEVAL(d5)
case '/':
return op1/op2; return A+B EVAL(d5)
EVAL(d4)
case '^': return val de B
A
return pow(op1,op2);
}
}
} 36
}
3.5 Arboles de Expresion.
o Construcción.
o Evaluación. Raiz d1

float EVAL(PtNodoAr R)
* d2d3

{ float op1, op2, val;


TInfoAr car;
d2 d3
while(R!=NULL)
{ if(isalpha(R->Info)) + d4d5 - d6d7
{ cout<<R->Info<<" = ";
cin>>val;
return val; d4 d5 d6 d7
} A NN B NN E NN F N N
else
{ op1=EVAL(R->Izq);
op2=EVAL(R->Der);
switch(R->Info) EVAL(d1)
{ case '+':
return op1+op2; op1 = A + B
case '-': op2 = EEVAL(d3)
-– F
return op1-op2; return (A+B) * (E-F)
EVAL(d3)
case '*':
return op1*op2; op1 = EEVAL(d6)
case '/': op2 = FEVAL(d7)
return op1/op2; return E - F EVAL(d7)
case '^':
EVAL(d6)
return pow(op1,op2); return val de F
E
}
}
} 37
}

Anda mungkin juga menyukai