You are on page 1of 15
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;

You might also like