Está en la página 1de 20

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA


ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS
ESTRUCTURA DE DATOS
Semana 10
ARBOLES ESPECIALES
CONTENIDO
Continuación de Arboles Binarios (AB)
Árbol Binario extendido
Arboles de Expresión – Operaciones
Árbol Binario de Búsqueda
Operaciones sobre Arboles binarios
Inserción, eliminación, Búsqueda e Intercalación
Aplicaciones
Árbol Binario Extendido
Definición
Un árbol Binario se llama árbol 2 o Árbol Binario extendido si cumple que todo
vértice tiene cero o dos hijos.
Los nodos con 0 hijos se denominan nodos internos
En un árbol -2 los nodos internos se grafican mediante círculos y las hojas
mediante cuadrados
Un árbol binario estrictamente binario con n hojas tiene 2 n – 1 nodos.

a) Árbol Binario b) Árbol Binario Extendido


Un árbol binario puede convertirse a árbol – 2 reemplazando todo árbol
vacío por un nuevo nodo
Al extenderse un árbol sus hojas se convierten en nodos internos y los
nodos añadidos se convierten en hojas
Utilidad de los arboles extendido es para representar expresiones
Aritméticas.

Arboles de Expresiones o expresiones aritméticas:


Un árbol ordenado puede utilizarse para representar una Expresión Aritmética
El recorrido In Orden del árbol produce la Expresión en Notación Infija
De igual manera los Recorridos Pre Orden y post Orden producen las
Notaciones Prefija y Post fija respectivamente.
Un árbol de Expresión es un árbol Binario si cumple:
- Los nodos hojas están etiquetadas con operandos
- Los nodos No hojas están etiquetadas con operadores
Sintaxis abstracta para representar un árbol de expresiones es mediante un
operador Binario denominado Op y las dos sobrexpresiones E1 y E2

OP
RAIZ

E1 E2

Sea e una expresión aritmética.


Si OP = +, entonces el valor de E es la suma de los valores de E1 y E2
Si OP = *, entonces el valor de E es el producto de los valores de E1 y E2
Ejemplo:

4 h

Pre- Orden: + 4h Notacion Prefija


In-Orden: 4+h Notacion Infija
Post-Orden: 4h + Notacion postfija
EJEMPLO:
*

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

Diferencia entre nodos internos y nodos externos


Los nodos son los únicos que tienen hijos por tanto requieren 2 apuntadores a
los hijos.
Los nodos hojas no tienen hijos por tanto no requieren apuntadores a hijos, si
los tienen son nulos.
Por lo general los nodos hojas tienen información asociada mientras que las no
hojas solo tienen apuntadores a los hijos.
Teniendo en cuenta este concepto, puede ser conveniente dividir en el conjunto
de vértices V en dos conjuntos NI (Nodos internos a no hojas) y un conjunto NE
(nodos externos o hojas).

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

Ejemplo: Sea la Expresión


R = ( X + Y) * ( Z – W)
Expresada en notación Infija con uso de paréntesis
Expresado en Notación Posfija
XY + ZW - *
Pseudocodigo: Evaluación postfija de una expresión
Registro nodo
Inicio
Booleano Tiponodo // muestra el tipo de nodo: Operando u Operador
UNION
Carácter valorcarácter
Real valornumerico
Fin UNION
Nodo *HI
Nodo *HD
Fin
Nodo *Raiz // Raiz del arbol

Accion Evalua(Raiz) : Tipo real


Inicio
Real Operando1 Operando2
Carácter Operador
Si (Raiz Tiponodo = operando)
Retornar (Raiz valornumerico)
Finsi
Operando1 = evalua(RaizHI)
Operando2 = evalua(Raiz—HD)
Operador = Raiz valorcaracter
Evaluar = Operación(Operador, Operando1, Operando2)
Fin
Accion Operación(Oper, Op1, Op2) :tipo real
Inicio
Por casos(Oper)
Caso “ + “: return (Op1 + Op2)
Caso “ - “: return (Op1 - Op2)
Caso “ * “: return (Op1 * Op2)
Caso “ / “: return (Op1 / Op2)
Caso “ ^ “: return (exponen Op1, Op2)
Fin casos
Fin

Construcción de un árbol de expresión:


Sea una expresión W en Notación Postfija. Sea un algoritmo para construir un
árbol de expresión a partir de W.

W A

Entrada: W Expresión Postfija


Salida: A Árbol de expresión

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

2. Se lee el símbolo + así que lo sacan los apuntadores de la Pila, se


forman un nuevo árbol y se empila un apuntador al nuevo árbol.

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-

4. Se lee el operado.- Se sacan los 2 últimos apuntadores y se forma un


nuevo árbol con “ –“ como raíz
P:

+ ´-

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

Declaración de un nodo de un Árbol Binario:


Registro Nodo
Inicio
T VALOR
Nodo HI // apunta al Hijo Izquierdo
Nodo HD // apunta al Hijo Derecho
Fin
Pseudocodigo para Construir un Árbol de Expresión

Accion Construye_Arbol-De Expresion


Inicio
Leer C // Lee C hasta que C = #
Mientras (C < > #)
Si C es operando
P = nuevo_nodo
Pvalor = C
Empilar ( P, p)
Sino
Desempilar (P, p1)
Desempilar (P, p2)
P = Nodo( )
P VALOR = C
pHI = p1
pHD = p2
Empilar (P, p)
Finsi
Leer C
Fin Mientras
Fin

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

La Notación Infija o en In-Orden es:

a*b+c/d

La Notación Postfija o en Post-Orden es:

ab*cd/+

Conversión de una Expresión Infija a Postfija


Entrada: Wi Expresión en Notación Infija y se le añade “ ) “
Salida: Wp Expresión en Notación Postfija
Precondición: La Expresión corresponde al recorrido In-Orden de un árbol
Binario de Expresión
Wi deberá ingresarse símbolo por símbolo
La pila P.
Debe estar vacía. Se empila “ ( “ y se añade “ ) “ al finalizar la Expresión Infija
Wi.
Postcondición: El método halla la expresión Notación postfija Wp.

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

Árbol Binario de Búsqueda o Árbol Binario Ordenado


Un Árbol Binario de Búsqueda ABB (Ing Binary, Search Tree) es aquel árbol en
los cuales sus nodos están etiquetados con un valor de llave tomado de un
conjunto E, estos elementos pueden ser de tipo complejo pero por
simplificación supongamos que son enteros. En un Árbol de Búsqueda se
cumple que:

Para todo nodo N


Todos los valores de los nodos del sub árbol izquierdo son menores que el
valor de la Llave es N
Todos los valores de los Nodos del subárbol derecho son mayores que el valor
de la Llave de N
Ejemplo: Sea el siguiente Árbol Binario de Búsqueda;

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 árbol Binario permite realizar la búsqueda de un elemento, inserción y


eliminación
Implementación de un Árbol Binario de Búsqueda mediante:
- Arreglo unidimensional
- Listas enlazadas.
En un arreglo Unidimensional:
Se puede buscar y encontrar fácilmente en cuanto a la inserción y la
eliminación no es conveniente por lo que se tiene que realizar despalzamientos
a la izquierda y a la derecha del elemento a insertar.
En una lista Enlazada
Se pueden insertar y eliminar fácilmente pero en cuanto a realizar la búsqueda
no es recomendable de preferencia usar una estructura secuencial para la
búsqueda.
Búsqueda de un elemento
Sea el Vector V a buscar en un árbol con Raíz R, la Acción Buscar debe
devolver la dirección p (apuntador) al nodo que contiene V o Nulo si no se
encuentra V
Si el árbol esta vacío, es decir R = Nulo, se devuelve P = NULO, Si no se
compara el valor del nodo actual con V, si son iguales devuelve en p la
Dirección del Nodo, Si no es así hacemos una búsqueda recursiva en el árbol,
bien en el lado izquierdo o bien en el lado derecho del nodo dependiendo de la
relación del valor del nodo con V.
Sea un árbol cuyos nodos son registros tipo Nodo
Registro Nodo
Inicio
T valor
Nodo HI // apuntador al hijo izquierdo
Nodo HD // apuntador al Hijo derecho
Fin

Realizar el Pseudocodigo de la Búsqueda de un elemento en el árbol Binario


de Búsqueda
Para lo cual se debe considerar lo siguiente;
Raíz: Apuntador al nodo raíz del árbol
Val: Val a buscar
Pos: Apuntador al nodo que contiene Val o Nulo si no se encuentra.
PosPad: Apuntador al padre
Accion BUSCAR(Raiz, Val, Pos, PosPad)
Inicio
Si (Raiz = NULL)
PosPad = NULL
Sino
n = Raiz
Si (nvalor = V)
Pos = raiz
PosPad = NULL
Sino
Si (nvalor < Val)
n = nhd
sino
n = nhi
Finsi
Padre = Raiz
Encontro = 0
Mientras (n < > NULL) V (Encontro = 0)
Si (nvalor = Val)
Pos = n
PosPad = Padre
Encontro = 1
Sino
Padre = n
Si (Val < nvalor)
n = nhi
sino
n = nhd
Finsi
Finsi
Fin Mientras
Si (Encontro = 0 )
Pos = NULL
PosPad = Padre
Finsi
Finsi
Fin
La Búsqueda puede realizarse en forma recursiva

Accion Bus_Rec(R, Val) : tipo P


Inicio
Si R = NULL
Buscar = NULL
Sino
Si (Val < R valor)
Buscar = Bus_Rec(R hi, Val)
Sino
Si (Val > Rvalor)
Buscar= Bus_Rec (Rhd, Val)
Sino
Buscar = R
Finsi
Finsi
Finsi
Retornar Buscar
Fin

BUSQUEDA E INSERCION EN ARBOLES BINARIOS DE BUSQUEDA


Sea un árbol Binario de Búsqueda
Se verán Operaciones básicas de búsqueda e inserción en un árbol Binario de
Búsqueda
Estas Operaciones se realizaran en un Algoritmo único de Búsqueda e
inserción
Sea un ITEM de información dado. El siguiente algoritmo busca la posición de
un ITEM en el árbol Binario de Búsqueda o inserta ITEM como un nuevo nodo
en una posición dada del árbol Binario de Búsqueda

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.

El procedimiento para insertar


1.- Se encuentra las posiciones de un ITEM dado y de su padre- El
procedimiento recorre el árbol hacia abajo usando el puntero PTR y el puntero
SALVA para el nodo padre.
Inicio de la inserción
1.- Se posiciona el primer elemento como ITEM = 40
40
2.- se inserta el segundo elemento como ITEM = 60 recorriendo desde 40
hacia abajo como hijo derecho:
40

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

De este modo se insertaron todos los elementos en el árbol Binario de


Búsqueda.

Procedimiento para encontrar la posición POS de ITEM en el árbol


Binario de Búsqueda y también encuentra la posición del padre
PAD de ITEM.
Existen 3 casos:

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 ( )

// Inicializar Punteros PTR y SALVA


Si (ITEM < INFO  RAIZ
PTR = IZQ  RAIZ
SALVA = RAIZ
Sino
PTR = DER  RAIZ
SALVA = RAIZ
Finsi
Mientras (PTR < > NULL)
// ¿ El ITEM se ha encontrado ?
Si (ITEM = INFO PTR
POS = PTR
PAD = SALVA
Exit ( )
Si (ITEM < INFO  PTR
SALVA = PTR
PTR = IZQ  PTR
Sino
SALVA = PTR
PTR = DER  PTR
Finsi
FinMientras
// Busqueda infructuosa
POS = NULL
PAD = SALVA
Fin
El ALGORITMO DE INSERCION Y BUSQUEDA

Accion INSBST (INFO,IZQ, DER, RAIZ, DISP, ITEM POS)


// El arbol binario de busqueda esta en memoria y se da un
ITEM de informacion. ElMalgoritmo encuentra la posisciòn POS
de ITEM en el Arbol Binario de Busqueda o añade ITEM como
nuevo nodo del Arbol en la posicion POS
Llamar a ENCONTRAR(INFO, IZQ, DER, RAIZ, ITEM, POS,
PAD)
Si (POS < > NULL)
// Copiar ITEM en un nuevo nodo de la lista de DISP
Si (DISP = NULL)
Escribir “ No hay espacio”
Sino
NUEVO = DISP
DISP = IZQ  DISP
INFO  NUEVO = ITEM
POS = NUEVO
IZQ NUEVO = NULL
DER NUEVO = NULL
// Añade ITEM al arbol
Si ( PAD = NULL)
RAIZ = NUEVO
Sino
Si (ITEM < INFO PAD )
IZQ PAD = NUEVO
Sino
DER PAD = NUEVO
Fin si
FIn

ELIMINACION EN UN ARBOL BINARIO DE BUSQUEDA

También podría gustarte