El documento describe un árbol 2-3, un tipo de árbol binario de búsqueda balanceado. Un árbol 2-3 mantiene la propiedad de que todas las hojas están en el mismo nivel, y los nodos internos tienen 2 o 3 hijos. El documento explica las operaciones básicas de búsqueda, inserción y eliminación en un árbol 2-3 y los posibles casos que pueden ocurrir durante la inserción y eliminación.
2. ÁRBOL 2-3
(UN ÁRBOL TRIARIO ORDENADO
BALANCEADO):
Es un árbol que cumple con las siguientes condiciones para
garantizar su adecuado balanceo.
Todas las hojas se encuentran en el mismo nivel, ordenadas de
izquierda a derecha.
Todos los nodos internos tienen por lo menos 2 sub-arboles
asociados no vacíos, aunque la raíz derecha este vacía.
Son un tipo de árbol balanceado por altura (height balanced). Se
define como un árbol en dónde todos los nodos no-terminales tienen
2 ó 3 descendientes y todos los nodos hoja tienen la misma longitud
(path length) o distancia desde la raíz.
Fueron introducidos con el objeto de mejorar el tiempo de acceso en
estructuras de datos manejadas en memoria secundaria, en las cuales
el número de consultas a un registro influye de manera determinante
en el tiempo de respuesta de la operación.
3. ESTRUCTURA
La estructura de un árbol 2-3 exige que el crecimiento no se haga a
nivel de las hojas (aunque la inserción sigue siendo en las hojas), sino
a nivel de la raíz, ya que todas las hojas se deben mantener siempre
en el mismo nivel. El proceso global de inserción comienza por
localizar la hoja en la cual se debe agregar el elemento.
Es un árbol que está vacío o satisface las siguientes propiedades:
Los nodos pueden tener 2 ó 3 hijos (2-nodo ó 3-nodo).
Cumple las propiedades de árbol multicamino de búsqueda.
Todas las hojas están en el mismo nivel.
5. OPERACIONES BÁSICAS:
Búsqueda (similar a los árboles multicamino de búsqueda).
Inserción (se realiza en las hojas. Se pueden producir
reestructuraciones del árbol en el camino de vuelta).
Borrado (se realiza en las hojas. Se pueden producir
reestructuraciones del árbol en el camino de vuelta).
En un árbol 2-3 de altura h tenemos:
2h - 1 elementos si todos los nodos son del tipo 2-nodo
3h - 1 elementos si todos los nodos son del tipo 3-nodo, por lo que
la altura de un árbol 2-3 con n elementos se encuentra entre los
límites: log3 (n+1) y log2 (n+1).
Las reestructuraciones se realizan desde las hojas hacia la raíz.
6. CASOS AL MOMENTO DE INSERTAR
ELEMENTOS
El elemento a insertar irá en un 2-nodo: INSERCION DIRECTA
Caso 1.- Existe espacio en el nodo. Se coloca allí adecuadamente el
elemento y la estructura de un árbol no se altera.
7. CASOS AL MOMENTO DE INSERTAR
ELEMENTOS
El elemento a insertar irá en un 3-nodo: HAY QUE CREAR UN NUEVO
NODO
Caso 2.- El nodo está lleno. Este se debe partir en dos nodos del
mismo nivel, repartiendo los tres elementos (dos elementos del nodo
y el nuevo elemento). De la siguiente manera
8. CASOS AL MOMENTO DE ELIMINAR
ELEMENTOS
El borrado de elementos en un árbol 2-3 tiene tres casos:
Si el nodo no está en el último nivel, buscamos el sucesor (o antecesor) y lo reemplazamos por
ese elemento, eliminando el mismo del último nivel.
Si el nodo está en el último nivel y tiene dos elementos queda con uno sólo.
Sino, el nodo tiene un elemento, hay varias soluciones, pero la más sencilla es la siguiente:
Si el hermano tiene dos elementos, hacemos una rotación de los elementos para mantener el
árbol de búsqueda.
Si el hermano tiene sólo un elemento, lo mezclamos en un nuevo nodo, lo que ocasiona que
el padre se quede con un hijo menos. Esto implica un borrado en el padre y el algoritmo
continua en forma recursiva.
9. PSEUDOCODIGO DE INSERCIÓN EN
UN ÁRBOL 2-3
Si el árbol esta vacío entonces
crea un nuevo nodo y colocar r1 en el lado izquierdo del nodo .
Si ya hay un elemento y existe espacio en el nodo
hacer
si r1 es menor que el elemento
entonces el elemento 0.se coloca a la derecha .
si no
si r1 es mayor que el elemento
entonces el elemento se coloca del lado izquierdo y r1 del lado derecho.
Si no
si el nodo esta lleno se parte en dos nodos del mismo nivel, se crea un nuevo nodo y se reparten
los tres elemento(dos elementos del nodo y el nuevo elemento).