OP
RAIZ
E1 E2
4 h
5 +
8 a
Pre- Orden: *5+ 8a Notación Prefija
In-Orden: 5*8+a Notación Infija
Post-Orden: 5 8a+*+ Notación postfija
De ahora en adelante asumiremos que las hojas son nodos externos y las no
hojas son nodos internos.
Los árboles que contienen nodos de diferentes tipos se denominan
heterogéneos.
Ejemplo: Arboles de expresión aritmética, donde los nodos contienen en su
parte valor un operador si son internos y un operando si son nodos externos.
Aplicación: arboles binarios – Arboles de Expresión
Una expresión aritmética está formada por operandos y operadores aritméticos
OP
RAIZ
E1 E2
W A
Método:
Mientras existan símbolos
1. Leer carácter C Leer expresión Postfija símbolo por símbolo
2. Si (C es Operando) Crear árbol de un nodo
Empilar en P, un apuntador p al nodo
Si (C es Operado) Desempilar los 2 últimos nodos apuntadores a
Arboles p1, p2.
Construimos un árbol con Raíz C (el operador) y sus
Hijos Izquierdo y Derecho que apunta a p1 y p2
Respectivamente.
Empilamos p, apuntador al nuevo árbol.
3. En la pila queda finalmente un apuntador al árbol de expresión final.
Ejemplo: Sea la expresión W: a b + c d - *
1. Los primeros símbolos son operandos, por tanto creamos dos árboles
de un nodo y empilamos apuntadores a ellos en la pila.
P:
a. b
P:
.
a. .-b-
3. Luego se leen c y d los cuales generan un árbol de un solo nodo cada
uno.
P:
.
a. .-b- c- d-
+ ´-
.
b. .-b- c- d-
5. Finalmente se lee el operador. Se sacan los 2 últimos apuntadores y se
forma un nuevo árbol con “ * “ como raíz.
*
:
+ ´-
.
c. .-b- c- d-
EJEMPLO:
Sea el siguiente árbol de Expresión. Expresarlo en Notación Prefija, Infija y
Postfija
+
:
* ´/
.
a. .-b- c- d-
La notación Prefija o en Pre-Orden es
+*ab/cd
a*b+c/d
ab*cd/+
Wi Wp
Acción Infija _ a-Postfija (Wi, Wp)
Inicio
Empilar (P, “ ( “)
Mientras ( No vacio ( P ))
Leer S
Por casos (S)
S es operando
Escribir S
S es “ ( “
Empilar ( P, “ ( “ )
S es operador O
Mientras ( Top es operador ⊖ > = precedencia a ⊕ )
Desempilar ( P, ⊕ )
Escribir ⊕
Fin Mientras
Empilar ( P, ⊕ )
S es “ ) “
Repetir
Si ( tTp es operador ⊖ )
Desempilar (P, ⊖)
Escribir
Fin si
Hasta que (Top es “ ( “ )
Desempilar ( P, “ ( “ )
Fin Casos
Fin Mientras
Fin
38
14 53
.
3 19 49 70
La Llave es 38
Entonces
Menores que 38 Mayores que 38
14 < 38 53 > 38
3 < 38 49 > 38
19 < 38 70 > 38
El Proceso es el siguiente:
a) Comparar ITEM con el Nodo raíz del árbol
i) Si ITEM > N, procede con el hijo izquierdo de N
ii) Si ITEM >N, proceder con el hijo derecho de N
b) Repetir el paso a) hasta que se dé una de las siguientes condiciones:
i) Se encuentra un nodo N tal que ITEM = N. En este caso se ha
completado la búsqueda.
ii) Se encuentra un árbol vacío, lo que indica que la búsqueda ha
sido infructuosa, y se inserta ITEM en el lugar del subárbol vacío
Es decir se procede hacia abajo desde la raíz R por el árbol Binario de
búsqueda hasta que se encuentra ITEM como un nodo terminal del árbol
binario de búsqueda.
Ejemplo:
Sea el árbol binario de búsqueda siguiente. Supongamos que se da ITEM = 20
38
14 56
8 23 45 82
18 70
Siguiendo el algoritmo anterior tendríamos los siguientes pasos:
1- Se compara ITEM = 20 con la Raíz 38 del árbol Binario. Como 20 > 38
se procede con el hijo Izquierdo de 38 que es 14
2- Se compara ITEM = 20 con 14. Como 20 > 14 se procede con el Hijo
Derecho de 14 que es 23.
3- Se compara ITEM = 20. Como 20 < 23, se procede con el Hijo Izquierdo
de 23 que es 18
4- Se compara ITEM = 20 con 18. Como 20 > 18 y 18 no tiene Hijo
Derecho, se inserta 20 como Hijo derecho de 18
38
14 56
8 23 45 82
18 70
20
El árbol Binario de Búsqueda con ITEM =20 insertado.
Realizar la Inserción de los siguientes elementos: 40, 60, 50, 33, 55, 11 en un
árbol Binario de Búsqueda vacío.
60
3.- Se inserte el tercer elemento como ITEM = 50 se recorre hacia abajo a
partir de 60 y se posiciona como Hijo Izquierdo de 60
40
60
50
4.- Se inserte el cuarto elemento como ITEM = 33, se recorre hacia abajo
desde la raíz dado que 33 es menor que la Raíz y se coloca como hijo
izquierdo de 40
40
33 60
50
5.- Se inserta el quinto elemento como ITEM = 55, como es mayor que la raíz
40 se recorre el subárbol derecho y se posiciona como hijo derecho de 50 ya
que es mayor que 50.
40
33 60
50
55
6.- Se inserta el sexto elemento como ITEM = 11, como es menor que la
Raíz 40 se recorre el subárbol Izquierdo y se posiciona como hijo
izquierdo de 33.
40
33 60
11 50
55
i) POS = NULL y PAD = NULL, esto indica que el árbol está vacío
ii) POS < > NULL y PAD = NULL, esto indica que ITEM es la Raíz
del árbol Binario de Búsqueda
iii) POS = NULL y PAD < > NULL esto indica que ITEM no está en el
árbol Binario de Búsqueda y que puede ser añadido como Hijo del
Nodo N de la posición PAD.
PROCEDIMIENTO ENCONTRAR (INFO,IZQ, DER, RAIZ, ITEM,
POS, PPAD)
// El arbol Binario de Busqueda esta en memoria, y se da un ITEM de
informaciòn. Este procedimiento encuentra la posicion POS de ITEM
en el Arbol y tambien encuentra la posicion del padre PAD de ITEM.
Existen 3 casos:
iv) POS = NULL y PAD = NULL, esto indica que el arbol esta
vacio
v) POS < > NULL y PAD = NULL, esto indica que ITEM es la
Raiz del Arbol Binario de Busqueda
vi) POS = NULL y PAD < > NULL esto indica que ITEM no esta
en el Arbol Binario de Busqueda y que puede ser añadido
como Hijo del Nodo N de la posicion PAD.
// ¿El Arbol esta vacio?
Si (RAIZ = NULL)
POS = NULL
PAD = NULL
Escribir “ El arbol esta vacio”
Exit ()
Sino
// ¿ ITEM es la RAIZ’?
Si (ITEM = INFO RAIZ
POS = RAIZ
PAD = NULL
Escribr “ La raiz del arbol es ITEM”
Exit ( )