República Bolivariana de Venezuela
Ministerio de Educación Superior
Instituto Universitario de Tecnología de Cumaná
Cumaná – Estado Sucre
Objetivo 6
Árboles
Prof: Leonardo J. Malavé Q.
Sección: 01
Programación Estructurada II
Período Académico: II-2004
Tabla de Contenidos
Objetivo 6.- Árboles I Parte
Objetivo 6.- Árboles Binarios de Búsqueda (ABB) II Parte
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
Introducción:
Se trata de árboles de orden 2 en los que se cumple que para cada
nodo, el valor de la clave de la raíz del subárbol izquierdo es menor que el
valor de la clave del nodo y que el valor de la clave raíz del subárbol derecho
es mayor que el valor de la clave del nodo.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
• Operaciones
1. Declaración
2. Búsqueda
3. Inserción
4. Eliminación
5. Movimientos:
• Izquierda
• Derecha
• Raíz
6. Información:
• Comprobar si el árbol esta vacío
• Calcular el número de nodos
• Comprobación si un nodo es hoja
• Cálculo de la altura de un nodo y de un árbol
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
1. Declaración
typedef struct _nodo
{
int dato;
struct _nodo *rama[ORDEN];
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Arbol;
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
2. Búsqueda
Partiendo siempre del nodo raíz, el modo de buscar un elemento se define
de forma recursiva.
Si el árbol está vacío, terminamos la búsqueda: el elemento no está en el
árbol.
Si el valor del nodo raíz es igual que el del elemento que buscamos,
terminamos la búsqueda con éxito.
Si el valor del nodo raíz es mayor que el elemento que buscamos,
continuaremos la búsqueda en el árbol izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos,
continuaremos la búsqueda en el árbol derecho.
El valor de retorno de una función de búsqueda en un ABB puede ser un
puntero al nodo encontrado, o NULL, si no se ha encontrado.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
3. Inserción de un Elemento:
Para insertar un elemento nos basamos en el algoritmo de búsqueda. Si el
elemento está en el árbol no lo insertaremos. Si no lo está, lo insertaremos
a continuación del último nodo visitado.
Necesitamos un puntero auxiliar para conservar una referencia al padre del
nodo raíz actual. El valor inicial para ese puntero es NULL.
Padre = NULL
nodo = Raiz
Bucle: mientras actual no sea un árbol vacío o hasta que se encuentre el
elemento.
Si el valor del nodo raíz es mayor que el elemento que buscamos,
continuaremos la búsqueda en el árbol izquierdo: Padre=nodo,
nodo=nodo->izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos,
continuaremos la búsqueda en el árbol derecho: Padre=nodo,
nodo=nodo->derecho.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
Si Padre es NULL, el árbol estaba vacío, por lo tanto, el nuevo árbol
sólo contendrá el nuevo elemento, que será la raíz del árbol.
Si el elemento es menor que el Padre, entonces insertamos el nuevo
elemento como un nuevo árbol izquierdo de Padre.
Si el elemento es mayor que el Padre, entonces insertamos el nuevo
elemento como un nuevo árbol derecho de Padre.
Este modo de actuar asegura que el árbol sigue siendo ABB.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
4. Eliminación de un Elemento:
Para borrar un elemento también nos basamos en el algoritmo de
búsqueda. Si el elemento no está en el árbol no lo podremos borrar. Si
está, hay dos casos posibles:
a.- Se trata de un nodo hoja: en ese caso lo borraremos directamente.
b.- Se trata de un nodo rama: en ese caso no podemos eliminarlo, puesto
que perderíamos todos los elementos del árbol de que el nodo actual es
padre. En su lugar buscamos el nodo más a la izquierda del subárbol
derecho, o el más a la derecha del subárbol izquierdo e intercambiamos
sus valores. A continuación eliminamos el nodo hoja.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
Necesitamos un puntero auxiliar para conservar una referencia al padre del
nodo raíz actual. El valor inicial para ese puntero es NULL.
Padre = NULL
Si el árbol está vacío: el elemento no está en el árbol, por lo tanto salimos
sin eliminar ningún elemento.
(1) Si el valor del nodo raíz es igual que el del elemento que buscamos,
estamos ante uno de los siguientes casos:
El nodo raíz es un nodo hoja:
Si 'Padre' es NULL, el nodo raíz es el único del árbol, por lo tanto
el puntero al árbol debe ser NULL.
Si raíz es la rama derecha de 'Padre', hacemos que esa rama
apunte a NULL.
Si raíz es la rama izquierda de 'Padre', hacemos que esa rama
apunte a NULL.
Eliminamos el nodo, y salimos.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
El nodo no es un nodo hoja:
Buscamos el 'nodo' más a la izquierda del árbol derecho de raíz o
el más a la derecha del árbol izquierdo. Hay que tener en cuenta
que puede que sólo exista uno de esos árboles. Al mismo tiempo,
actualizamos 'Padre' para que apunte al padre de 'nodo'.
Intercambiamos los elementos de los nodos raíz y 'nodo'.
Borramos el nodo 'nodo'. Esto significa volver a (1), ya que puede
suceder que 'nodo' no sea un nodo hoja. (Ver ejemplo 3)
Si el valor del nodo raíz es mayor que el elemento que buscamos,
continuaremos la búsqueda en el árbol izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos,
continuaremos la búsqueda en el árbol derecho.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
4. Eliminación de un Nodo Hoja:
En el árbol de ejemplo, borrar el nodo 3.
a.- Localizamos el nodo a borrar, al tiempo que mantenemos un puntero a
'Padre'.
b.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a
NULL.
c.- Borramos el 'nodo'.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja:
En el árbol de ejemplo, borrar el nodo 4.
a.- Localizamos el nodo a borrar ('raíz').
b.- Buscamos el nodo más a la derecha del árbol izquierdo de 'raíz', en
este caso el 3, al tiempo que mantenemos un puntero a 'Padre' a
'nodo'.
c.- Intercambiamos los elementos 3 y 4.
d.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora
apunte a NULL.
e.- Borramos el 'nodo'.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja:
Para este ejemplo usaremos otro árbol. En éste borraremos el elemento 6.
a.- Localizamos el nodo a borrar ('raíz').
b.- Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este
caso el 12, ya que el árbol derecho no tiene nodos a su izquierda, si
optamos por la rama izquierda, estaremos en un caso análogo. Al mismo
tiempo que mantenemos un puntero a 'Padre' a 'nodo'.
c.- Intercambiamos los elementos 6 y 12.
d.- Ahora tenemos que repetir el bucle para el nodo 6 de nuevo, ya que no
podemos eliminarlo
e.- Localizamos de nuevo el nodo a borrar ('raíz').
f.- Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este
caso el 16, al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja:
g.- Intercambiamos los elementos 6 y 16.
h.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a
NULL.
i.- Borramos el 'nodo'.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
5. Movimiento a través del árbol:
No hay mucho que contar. Nuestra estructura se referenciará siempre
mediante un puntero al nodo Raiz, este puntero no debe perderse nunca.
Para movernos a través del árbol usaremos punteros auxiliares, de modo
que desde cualquier puntero los movimientos posibles serán: moverse al
nodo raíz de la rama izquierda, moverse al nodo raíz de la rama derecha o
moverse al nodo Raiz del árbol.
6. Información:
Hay varios parámetros que podemos calcular o medir dentro de un árbol.
Algunos de ellos nos darán idea de lo eficientemente que está organizado
o el modo en que funciona.
Comprobar si un árbol está vacío.
Un árbol está vacío si su raíz es NULL.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
6. Información:
Calcular el número de nodos.
Tenemos dos opciones para hacer esto, una es llevar siempre la cuenta de
nodos en el árbol al mismo tiempo que se añaden o eliminan elementos. La
otra es, sencillamente, contarlos.
Para contar los nodos podemos recurrir a cualquiera de los tres modos de
recorrer el árbol: inorden, preorden o postorden, como acción
sencillamente incrementamos el contador.
Comprobar si el nodo es hoja.
Esto es muy sencillo, basta con comprobar si tanto el árbol izquierdo como
el derecho están vacíos. Si ambos lo están, se trata de un nodo hoja.
Calcular la altura de un nodo.
No hay un modo directo de hacer esto, ya que no nos es posible recorrer el
árbol en la dirección de la raíz. De modo que tendremos que recurrir a otra
técnica para calcular la altura.
Lo que haremos es buscar el elemento del nodo de que queremos averiguar la
altura. Cada vez que avancemos un nodo incrementamos la variable que
contendrá la altura del nodo.
Empezamos con el nodo raíz apuntando a Raiz, y la 'Altura' igual a cero.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
6. Información:
Lo que haremos es buscar el elemento del nodo de que queremos
averiguar la altura. Cada vez que avancemos un nodo incrementamos la
variable que contendrá la altura del nodo.
Empezamos con el nodo raíz apuntando a Raiz, y la 'Altura' igual a cero. Si
el valor del nodo raíz es igual que el del elemento que buscamos,
terminamos la búsqueda y el valor de la altura es 'Altura'. Incrementamos
'Altura'.
Si el valor del nodo raíz es mayor que el elemento que buscamos,
continuaremos la búsqueda en el árbol izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos,
continuaremos la búsqueda en el árbol derecho.
Calcular la altura de un árbol.
La altura del árbol es la altura del nodo de mayor altura. Para buscar este valor
tendremos que recorrer todo el árbol, de nuevo es indiferente el tipo de
recorrido que hagamos, cada vez que cambiemos de nivel incrementamos
la variable que contiene la altura del nodo actual, cuando lleguemos a un
nodo hoja compararemos su altura con la variable que contiene la altura
del árbol si es mayor, actualizamos la altura del árbol.
Objetivo 6.- Árboles Binarios de Búsqueda (ABB)
6. Información:
Iniciamos un recorrido del árbol en postorden, con la variable de altura
igual a cero.
Cada vez que empecemos a recorrer una nueva rama, incrementamos la
altura para ese nodo.
Después de procesar las dos ramas, verificamos si la altura del nodo es
mayor que la variable que almacena la altura actual del árbol, si es así,
actualizamos esa variable.

Más contenido relacionado

PPS
Arboles Binarios
PDF
Abb árboles de búsqueda binaria
PDF
Arbol en programación ALAN MENDEZ.pdf
PPTX
Operaciones Básicas con Árboles
PPT
áRboles binarios
PPT
áRboles binarios
PDF
Tipo de dato abstracto en una extructura de datos
PPTX
Arboles_Java 1111111111111111 teoria .pptx
Arboles Binarios
Abb árboles de búsqueda binaria
Arbol en programación ALAN MENDEZ.pdf
Operaciones Básicas con Árboles
áRboles binarios
áRboles binarios
Tipo de dato abstracto en una extructura de datos
Arboles_Java 1111111111111111 teoria .pptx

Similar a Objetivo 6-2.ppt (20)

PPTX
Arboles binarios
PPTX
Arboles binarios
DOCX
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
PDF
Árboles splay
PPTX
Programación 3: árboles binarios y ordenados
PDF
Declarar Arboles. Operaciones. Ejemplospdf
PDF
Arboles Splay
PPTX
Structures project
PPTX
Structures project
PPTX
Presentación Árbol Binario
PPTX
Exploracion-de-Arboles-Avanzados-AVL-B-y-B.pptx
PDF
DECLARACION DE ARBOLES.pdf
PDF
Informe de Arboles.pdf
PPTX
Splay tree
PPT
3 estructuras no lineales estáticas y dinámicas
PDF
Presentación Arbol- Estructura de datos .pdf
PPTX
Arboles binarios
Arboles binarios
Arboles binarios
Informe técnico Unidad 4 Estructuras no lineales (Rubí Verónica)
Árboles splay
Programación 3: árboles binarios y ordenados
Declarar Arboles. Operaciones. Ejemplospdf
Arboles Splay
Structures project
Structures project
Presentación Árbol Binario
Exploracion-de-Arboles-Avanzados-AVL-B-y-B.pptx
DECLARACION DE ARBOLES.pdf
Informe de Arboles.pdf
Splay tree
3 estructuras no lineales estáticas y dinámicas
Presentación Arbol- Estructura de datos .pdf
Arboles binarios

Último (20)

PPTX
Clase 3 del silabo-gestion y control financiero
DOCX
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - CUARTO GRADO.docx
PDF
Aumente su Autoestima - Lair Ribeiro Ccesa007.pdf
PDF
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PPTX
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
PDF
Ernst Cassirer - Antropologia Filosofica.pdf
PDF
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
PDF
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
DOC
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
PDF
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
PDF
Modelo Educativo SUB 2023versión final.pdf
PDF
CURRICULAR DE PRIMARIA santa ursula..pdf
PDF
Jodorowsky, Alejandro - Manual de Psicomagia.pdf
PDF
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
PPTX
4. Qué es un computador PARA GRADO CUARTO.pptx
PDF
informe tipos de Informatica perfiles profesionales _pdf
PDF
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
DOCX
Programa_Sintetico_Fase_4.docx 3° Y 4°..
PDF
E1 Guía_Matemática_5°_grado.pdf paraguay
Clase 3 del silabo-gestion y control financiero
TEXTO DE TRABAJO DE EDUCACION RELIGIOSA - CUARTO GRADO.docx
Aumente su Autoestima - Lair Ribeiro Ccesa007.pdf
LIBRO 2-SALUD Y AMBIENTE-4TO CEBA avanzado.pdf
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
TEMA 1ORGANIZACIÓN FUNCIONAL DEL CUERPO, MEDIO INTERNO Y HOMEOSTASIS (3) [Aut...
Ernst Cassirer - Antropologia Filosofica.pdf
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
4°_GRADO_-_SESIONES_DEL_11_AL_15_DE_AGOSTO.doc
Iniciación Al Aprendizaje Basado En Proyectos ABP Ccesa007.pdf
Modelo Educativo SUB 2023versión final.pdf
CURRICULAR DE PRIMARIA santa ursula..pdf
Jodorowsky, Alejandro - Manual de Psicomagia.pdf
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
4. Qué es un computador PARA GRADO CUARTO.pptx
informe tipos de Informatica perfiles profesionales _pdf
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
Programa_Sintetico_Fase_4.docx 3° Y 4°..
E1 Guía_Matemática_5°_grado.pdf paraguay

Objetivo 6-2.ppt

  • 1. República Bolivariana de Venezuela Ministerio de Educación Superior Instituto Universitario de Tecnología de Cumaná Cumaná – Estado Sucre Objetivo 6 Árboles Prof: Leonardo J. Malavé Q. Sección: 01 Programación Estructurada II Período Académico: II-2004
  • 2. Tabla de Contenidos Objetivo 6.- Árboles I Parte Objetivo 6.- Árboles Binarios de Búsqueda (ABB) II Parte
  • 3. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) Introducción: Se trata de árboles de orden 2 en los que se cumple que para cada nodo, el valor de la clave de la raíz del subárbol izquierdo es menor que el valor de la clave del nodo y que el valor de la clave raíz del subárbol derecho es mayor que el valor de la clave del nodo.
  • 4. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) • Operaciones 1. Declaración 2. Búsqueda 3. Inserción 4. Eliminación 5. Movimientos: • Izquierda • Derecha • Raíz 6. Información: • Comprobar si el árbol esta vacío • Calcular el número de nodos • Comprobación si un nodo es hoja • Cálculo de la altura de un nodo y de un árbol
  • 5. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 1. Declaración typedef struct _nodo { int dato; struct _nodo *rama[ORDEN]; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Arbol;
  • 6. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 2. Búsqueda Partiendo siempre del nodo raíz, el modo de buscar un elemento se define de forma recursiva. Si el árbol está vacío, terminamos la búsqueda: el elemento no está en el árbol. Si el valor del nodo raíz es igual que el del elemento que buscamos, terminamos la búsqueda con éxito. Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo. Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho. El valor de retorno de una función de búsqueda en un ABB puede ser un puntero al nodo encontrado, o NULL, si no se ha encontrado.
  • 7. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 3. Inserción de un Elemento: Para insertar un elemento nos basamos en el algoritmo de búsqueda. Si el elemento está en el árbol no lo insertaremos. Si no lo está, lo insertaremos a continuación del último nodo visitado. Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raíz actual. El valor inicial para ese puntero es NULL. Padre = NULL nodo = Raiz Bucle: mientras actual no sea un árbol vacío o hasta que se encuentre el elemento. Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo: Padre=nodo, nodo=nodo->izquierdo. Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho: Padre=nodo, nodo=nodo->derecho.
  • 8. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) Si Padre es NULL, el árbol estaba vacío, por lo tanto, el nuevo árbol sólo contendrá el nuevo elemento, que será la raíz del árbol. Si el elemento es menor que el Padre, entonces insertamos el nuevo elemento como un nuevo árbol izquierdo de Padre. Si el elemento es mayor que el Padre, entonces insertamos el nuevo elemento como un nuevo árbol derecho de Padre. Este modo de actuar asegura que el árbol sigue siendo ABB.
  • 9. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 4. Eliminación de un Elemento: Para borrar un elemento también nos basamos en el algoritmo de búsqueda. Si el elemento no está en el árbol no lo podremos borrar. Si está, hay dos casos posibles: a.- Se trata de un nodo hoja: en ese caso lo borraremos directamente. b.- Se trata de un nodo rama: en ese caso no podemos eliminarlo, puesto que perderíamos todos los elementos del árbol de que el nodo actual es padre. En su lugar buscamos el nodo más a la izquierda del subárbol derecho, o el más a la derecha del subárbol izquierdo e intercambiamos sus valores. A continuación eliminamos el nodo hoja.
  • 10. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raíz actual. El valor inicial para ese puntero es NULL. Padre = NULL Si el árbol está vacío: el elemento no está en el árbol, por lo tanto salimos sin eliminar ningún elemento. (1) Si el valor del nodo raíz es igual que el del elemento que buscamos, estamos ante uno de los siguientes casos: El nodo raíz es un nodo hoja: Si 'Padre' es NULL, el nodo raíz es el único del árbol, por lo tanto el puntero al árbol debe ser NULL. Si raíz es la rama derecha de 'Padre', hacemos que esa rama apunte a NULL. Si raíz es la rama izquierda de 'Padre', hacemos que esa rama apunte a NULL. Eliminamos el nodo, y salimos.
  • 11. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) El nodo no es un nodo hoja: Buscamos el 'nodo' más a la izquierda del árbol derecho de raíz o el más a la derecha del árbol izquierdo. Hay que tener en cuenta que puede que sólo exista uno de esos árboles. Al mismo tiempo, actualizamos 'Padre' para que apunte al padre de 'nodo'. Intercambiamos los elementos de los nodos raíz y 'nodo'. Borramos el nodo 'nodo'. Esto significa volver a (1), ya que puede suceder que 'nodo' no sea un nodo hoja. (Ver ejemplo 3) Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo. Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho.
  • 12. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 4. Eliminación de un Nodo Hoja: En el árbol de ejemplo, borrar el nodo 3. a.- Localizamos el nodo a borrar, al tiempo que mantenemos un puntero a 'Padre'. b.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL. c.- Borramos el 'nodo'.
  • 13. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja: En el árbol de ejemplo, borrar el nodo 4. a.- Localizamos el nodo a borrar ('raíz'). b.- Buscamos el nodo más a la derecha del árbol izquierdo de 'raíz', en este caso el 3, al tiempo que mantenemos un puntero a 'Padre' a 'nodo'. c.- Intercambiamos los elementos 3 y 4. d.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL. e.- Borramos el 'nodo'.
  • 14. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja: Para este ejemplo usaremos otro árbol. En éste borraremos el elemento 6. a.- Localizamos el nodo a borrar ('raíz'). b.- Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este caso el 12, ya que el árbol derecho no tiene nodos a su izquierda, si optamos por la rama izquierda, estaremos en un caso análogo. Al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'. c.- Intercambiamos los elementos 6 y 12. d.- Ahora tenemos que repetir el bucle para el nodo 6 de nuevo, ya que no podemos eliminarlo e.- Localizamos de nuevo el nodo a borrar ('raíz'). f.- Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este caso el 16, al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'.
  • 15. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 4. Eliminación de un Nodo Rama con un Intercambio de un Nodo Hoja: g.- Intercambiamos los elementos 6 y 16. h.- Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL. i.- Borramos el 'nodo'.
  • 16. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 5. Movimiento a través del árbol: No hay mucho que contar. Nuestra estructura se referenciará siempre mediante un puntero al nodo Raiz, este puntero no debe perderse nunca. Para movernos a través del árbol usaremos punteros auxiliares, de modo que desde cualquier puntero los movimientos posibles serán: moverse al nodo raíz de la rama izquierda, moverse al nodo raíz de la rama derecha o moverse al nodo Raiz del árbol. 6. Información: Hay varios parámetros que podemos calcular o medir dentro de un árbol. Algunos de ellos nos darán idea de lo eficientemente que está organizado o el modo en que funciona. Comprobar si un árbol está vacío. Un árbol está vacío si su raíz es NULL.
  • 17. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 6. Información: Calcular el número de nodos. Tenemos dos opciones para hacer esto, una es llevar siempre la cuenta de nodos en el árbol al mismo tiempo que se añaden o eliminan elementos. La otra es, sencillamente, contarlos. Para contar los nodos podemos recurrir a cualquiera de los tres modos de recorrer el árbol: inorden, preorden o postorden, como acción sencillamente incrementamos el contador. Comprobar si el nodo es hoja. Esto es muy sencillo, basta con comprobar si tanto el árbol izquierdo como el derecho están vacíos. Si ambos lo están, se trata de un nodo hoja. Calcular la altura de un nodo. No hay un modo directo de hacer esto, ya que no nos es posible recorrer el árbol en la dirección de la raíz. De modo que tendremos que recurrir a otra técnica para calcular la altura. Lo que haremos es buscar el elemento del nodo de que queremos averiguar la altura. Cada vez que avancemos un nodo incrementamos la variable que contendrá la altura del nodo. Empezamos con el nodo raíz apuntando a Raiz, y la 'Altura' igual a cero.
  • 18. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 6. Información: Lo que haremos es buscar el elemento del nodo de que queremos averiguar la altura. Cada vez que avancemos un nodo incrementamos la variable que contendrá la altura del nodo. Empezamos con el nodo raíz apuntando a Raiz, y la 'Altura' igual a cero. Si el valor del nodo raíz es igual que el del elemento que buscamos, terminamos la búsqueda y el valor de la altura es 'Altura'. Incrementamos 'Altura'. Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo. Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho. Calcular la altura de un árbol. La altura del árbol es la altura del nodo de mayor altura. Para buscar este valor tendremos que recorrer todo el árbol, de nuevo es indiferente el tipo de recorrido que hagamos, cada vez que cambiemos de nivel incrementamos la variable que contiene la altura del nodo actual, cuando lleguemos a un nodo hoja compararemos su altura con la variable que contiene la altura del árbol si es mayor, actualizamos la altura del árbol.
  • 19. Objetivo 6.- Árboles Binarios de Búsqueda (ABB) 6. Información: Iniciamos un recorrido del árbol en postorden, con la variable de altura igual a cero. Cada vez que empecemos a recorrer una nueva rama, incrementamos la altura para ese nodo. Después de procesar las dos ramas, verificamos si la altura del nodo es mayor que la variable que almacena la altura actual del árbol, si es así, actualizamos esa variable.