Professional Documents
Culture Documents
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o
varios nodos.
Tambin se suele dar una definicin recursiva: un rbol es una estructura en
compuesta por un dato y varios rboles.
Esto son definiciones simples. Pero las caractersticas que implican no lo son tanto.
Existen otros conceptos que definen las caractersticas del rbol, en relacin a su
tamao:
Orden: es el nmero potencial de hijos que puede tener cada
elemento de rbol. De este modo, diremos que un rbol en el que
cada nodo puede apuntar a otros dos es de orden dos, si puede
apuntar a tres ser de orden tres, etc.
Grado: el nmero de hijos que tiene el elemento con ms hijos
dentro del rbol. En el rbol del ejemplo, el grado es tres, ya que
tanto 'A' como 'D' tienen tres hijos, y no existen elementos con ms
de tres hijos.
Nivel: se define para cada elemento del rbol como la distancia a la
raz, medida en nodos. El nivel de la raz es cero y el de sus hijos uno.
As sucesivamente. En el ejemplo, el nodo 'D' tiene nivel 1, el nodo
'G' tiene nivel 2, y el nodo 'N', 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 raz de un rbol, tambin podemos hablar de altura de
ramas. El rbol del ejemplo tiene altura 3, la rama 'B' tiene altura 2,
la rama 'G' tiene altura 1, la 'H' cero, etc.
Los rboles de orden dos son bastante especiales, de hecho les dedicaremos varios
captulos. Estos rboles se conocen tambin como rboles binarios.
Frecuentemente, aunque tampoco es estrictamente necesario, para hacer ms fcil
moverse a travs del rbol, aadiremos un puntero a cada nodo que apunte al nodo
padre. De este modo podremos avanzar en direccin a la raz, y no slo hacia las
hojas.
Es importante conservar siempre el nodo raz ya que es el nodo a partir del cual se
desarrolla el rbol, si perdemos este nodo, perderemos el acceso a todo el rbol.
El nodo tpico de un rbol difiere de los nodos que hemos visto hasta ahora para
listas, aunque slo en el nmero de nodos. Veamos un ejemplo de nodo para crear
rboles de orden tres:
Struct nodo {
Int dato;
Struct nodo * rama1;
Struct nodo *rama2;
Struct nodo *rama3;
};
O generalizando ms:
#define ORDEN 5
Struct nodo {
Int dato;
Struct nodo *rama[ORDEN];
};
Buscar un elemento
Partiendo siempre del nodo raz, el modo de buscar un elemento se define de forma recursiva.
Si el rbol est vaco, terminamos la bsqueda: el elemento no est en el rbol.
Si el valor del nodo raz es igual que el del elemento que buscamos, terminamos la bsqueda
con xito.
Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda
en el rbol izquierdo.
Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda
en el rbol derecho.
El valor de retorno de una funcin de bsqueda en un ABB puede ser un puntero al nodo
encontrado, o NULL, si no se ha encontrado.
Insertar un elemento
Para insertar un elemento nos basamos en el algoritmo de bsqueda. Si el elemento est en el
rbol no lo insertaremos. Si no lo est, lo insertaremos a continuacin del ltimo nodo
visitado.
Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raz actual. El
valor inicial para ese puntero es NULL.
Padre = NULL
nodo = Raiz
Bucle: mientras actual no sea un rbol vaco o hasta que se encuentre el elemento.
Si el valor del nodo raz es mayor que el elemento que buscamos, continuaremos la bsqueda
en el rbol izquierdo: Padre=nodo, nodo=nodo->izquierdo.
Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos la bsqueda
en el rbol derecho: Padre=nodo, nodo=nodo->derecho.