martes, 1 de junio de 2010

Puntos Extra

Árbol Binario de Busqueda

En ciencias de la computación, un árbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. Con la raíz escogida, cada vértice tendrá un único padre, y nunca más de dos hijos. No pueden tener más de dos hijos (de ahí el nombre "binario"). Si algún hijo tiene como referencia a null, es decir que no almacena ningún dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno.

Tipos de árboles binarios

  • Un árbol binario es un árbol con raíz en el que cada nodo tiene como máximo dos hijos.
  • Un árbol binario lleno es un árbol en el que cada nodo tiene cero o dos hijos.
  • Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas (vértices con cero hijos) están a la misma profundidad (distancia desde la raíz, también llamada altura).

Un árbol binario es un árbol en el que ningún nodo puede tener más de dos subárboles. En un árbol binario cada nodo puede tener cero, uno o dos hijos (subárboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.


Búsqueda:

La búsqueda consiste acceder a la raíz del árbol, si el elemento a localizar coincide con éste la búsqueda ha concluido con éxito, si el elemento es menor se busca en el subárbol izquierdo y si es mayor en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone que no existe en el árbol. Cabe destacar que la búsqueda en este tipo de árboles es muy eficiente, representa una función logarítmica. El maximo número de comparaciones que necesitaríamos para saber si un elemento se encuentra en un árbol binario de búsqueda estaría entre [log2(N+1)] y N, siendo N el número de nodos.


Inserción:

La inserción es similar a la búsqueda y se puede dar una solución tanto iterativa como recursiva. Si tenemos inicialmente como parámetro un árbol vacío se crea un nuevo nodo como único contenido el elemento a insertar. Si no lo está, se comprueba si el elemento dado es menor que la raíz del árbol inicial con lo que se inserta en el subárbol izquierdo y si es mayor se inserta en el subárbol derecho. De esta forma las inserciones se hacen en las hojas.


Borrado:

La operación de borrado no es tan sencilla como las de búsqueda e inserción. Existen varios casos a tener en consideración:

  • Borrar un nodo sin hijos ó nodo hoja: simplemente se borra y se establece a nulo el apuntador de su padre.

Borrar un nodo con un subárbol hijo: se borra el nodo y se asigna su subárbol hijo como subárbol de su padre.


Borrar un nodo con dos subárboles hijo: la solución está en reemplazar el valor del nodo por el de su predecesor o por el de su sucesor en inorden y posteriormente borrar este nodo. Su predecesor en inorden será el nodo más a la derecha de su subárbol izquierdo (mayor nodo del subarbol izquierdo), y su sucesor el nodo más a la izquierda de su subárbol derecho (menor nodo del subarbol derecho). En la siguiente figura se muestra cómo existe la posibilidad de realizar cualquiera de ambos reemplazos:

Recorridos:

Se puede hacer un recorrido de un árbol en profundidad o en anchura.

Los recorridos en anchura son por niveles, se realiza horizontalmente desde la raíz a todos los hijos antes de pasar a la descendencia de alguno de los hijos.

El recorrido en profundidad lleva al camino desde la raíz hacia el descendiente más lejano del primer hijo y luego continúa con el siguiente hijo. Como recorridos en profundidad tenemos inorden, preorden y postorden.

Una propiedad de los ABB es que al hacer un recorrido en profundidad inorden obtenemos los elementos ordenados de forma ascendente.

Resultado de hacer el recorrido en:

Inorden (I/R/D) = [6, 9, 13, 14, 15, 17, 20, 26, 64, 72].

Preorden (R/I/D) = [15, 9, 6, 14, 13, 20, 17, 64, 26, 72].

Postorden (I/D/R) =[6, 13, 14, 9, 17, 26, 72, 64, 20, 15].

5 comentarios:

  1. Muy bien, solo una observacion mas no se si es correcta.segun yo en la eliminacion de un arbolb inario, siempre despues tieene que qeudar balanceado no? en un arbol binario eliminas un nodo nada mas por nada mas, pero despues esta el objetivo de balancearo, agregando otro nodo que pueda hacerlo Binario.

    ResponderEliminar
  2. Muy buena tu observación Hector :D

    ResponderEliminar
  3. Muye bien pero en cuanto en el tema de arboles binarios, se podría utilizar la inserción de un padre postizo, para que cada nodo tenga una pareja, es por eso que es binario, como mencionó mi cimpañer Hector, y creo que ya lo observaste,

    bueno creo que se le mencionaba apdre postizo según recuerdo nos dijo la Dra. Elisa

    Gracias.

    ResponderEliminar
  4. que buena explicacion (Y) con todas las imagenes que pusiste se explica bien todo :)
    y que buena observacion hizo Hector (Y)

    ResponderEliminar