Arboles. Arboles binarios y drboles ordenados 425
14.2.3. Especificacién del TAD arbol binario
Un drbol binario es aquel en el que cada nodo tiene como maximo dos descendientes o dos ramas,
por lo que el grado es dos. Las operaciones bisicas que sirven para definir un érbol binario y
poder manipular su contenido son las siguientes (no todas ellas se implementan al definir el
Arbol): si
Tipo de dato: Dato que se almacena en los nodos del érbol.
Operaciones:
CrearArbol Inicia el arbol como vacio.
Construir Crea un arbol con un elemento rafz y dos ramas, izquierda y derecha
que son, a su vez, drboles.
EsVacio Comprueba si el drbol no tiene nodos.
Raiz Devuelve el nodo raf.
Izquierdo Obtiene la rama o subarbol izquierdo de un arbol dado.
Derecho Obtiene la rama o subarbol derecho de un drbol dado.
Borrar Elimina del Arbol el nodo con un elemento determinado.
Pertenece Determina si un elemento se encuentra en el érbol.
14.3. ESTRUCTURA DE UN ARBOL BINARIO
La estructura de un rbol binario se construye con nodos. Cada nodo debe contener el campo dato
(datos a almacenar) y dos campos de tipo puntero, uno al subérbol izquierdo y otro al subérbol
derecho, que se conocen como puntero izquierde (izquierdo, izdo) y puntero derecho (derecho,
dcho) respectivamente, Un valor NULL indica un Arbol 0 un subérbol vacfo.
Tzquierdo | Datos | Derecho
Hoja_izquerda Hoja_derecha
zquierdo | Datos | Derecho
Figura 14.16. Representacién gréfica de los campos de un nodo.
El tipo de datos correspondiente a la estructura de un nodo de un drbol binario es el siguiente:
Nodo
subarbolIzquierdo < puntero a Nodo>
datos < Tipodato>
subarbolDerecho < puntero a Nodo>
Fin Nodo
La Figura 14.17 muestra la representaci6n enlazada de dos drboles binarios de raiz a, El
primero es un arbol degenerado a la izquierda; el segundo es un drbol binario completo de profun-
didad 4.
‘La Figura 14.18 se corresponde con un 4rbol binario y su estructura en nodos. Se puede observar
que los nodos de un arbol binario que son hojas se caracterizan por tener sus dos campos de enlace a
NULL.426 Algoritmos y estructuras de datos
/
3 aan A
J
ofa 3 c
J eS Mees
oa} eS pe fea peal] fron] oo
i J
Figura 14.17. Representacién enlazada de dos Arboles binarios,
a) Arbo!
Izdo| A [Deho|
aha
tsa] 8 fae) eo |
/ +H Vt <=
lzdo | M |Deho} Izdo} J |Dcho}
Sian Zot
6) Estructura
Figura 14.18. Arbol binario y su estructura en nodos.
14.3.1. Representacién de un nodo
El nodo se representa mediante una estructura (struct) para asf agrupar a todos los campos de
que consta. Se supone que el nodo tiene los campos dato, izdo (rama izquierda) y dcho (rama
derecha). El tipo de dato de los elementos se generaliza como tipoElemento.Arboles. Arboles binarios y arboles ordenados 427
Hijoizdo HijoDcho
zquierdo | Datos | Derecho
Representacion
typedef int TipoElemento; cualquier tipo de dato
typedef struct nodo (
‘TipoElemento dato;
struct nodo *izdo, *dcho;
}odo;
typedef Nodo* ArbolBinario;
14.3.2. Creacién de un arbol binario
‘A partir del nodo rafz de un drbol se puede acceder a los demés nodos del érbol, por ello el puntero
{que permite acceder al arbol es el que referencia al rafz. Las ramas izquierda y derecha son a su vez
Arboles binarios que tienen su rafz, y asf recursivamente hasta llegar a las hojas del drbol.
La formacién del drbol pasa por la creacién de cada uno de los nodos y el enlace con el corres-
pondiente nodo padre, Para crear un nodo de un 4rbol binario, se reserva memoria para el nodo, se
asigna cl dato al campo correspondiente y se inicializa los punteros izdo, dcho a NULL.
ArbolBinario crearNodo(TipoElemento x)
{
ArbolBinario a;
a = (ArbolBinario) malloc\sizeof (Nodo)) ;
a -> dato = x;
a -> dcho = a ->izdo = NULL;
return a;
)
La funcién nuevoarbol () crea un érbol cuya rafz.es un nodo con el campo dato el que se pasa
como tercer argumento, la rama izquierda y derecha del drbol se pasan como segundo y cuarto
argumentos,
void nuevoArbol (ArbolBinario* raiz, ArbolBinario ramaIzqda,
TipoElemento x, ArbolBinario ramaDrcha)
¥
*raiz = crearNodo(x);
(*raiz) -> izdo = ramaTzqda;
(*raiz) <> dcho = ramaDrcha;