Está en la página 1de 8

INSTITUTO POLITÉCNICO NACIONAL

Escuela Superior de Ingeniería


Mecánica y Eléctrica.
“Culhuacán”
Base y Estructura de Datos.

Profesor: Rodríguez Navarro Gustavo.

Alumno: Bonilla Sánchez Aldo David.

Grupo: 3EV36.

04 – Mayo – 2021.
Operaciones sobre arboles binarios.
Como en toda estructura de datos hay dos operaciones básicas, inserción y
eliminación.

Inserción

El procedimiento de inserción en un árbol binario de búsqueda es muy sencillo,


únicamente hay que tener cuidado de no romper la estructura ni el orden del
árbol.

Cuando se inserta un nuevo nodo en el árbol hay que tener en cuenta que cada
nodo no puede tener más de dos hijos, por esta razón si un nodo ya tiene 2
hijos, el nuevo nodo nunca se podrá insertar como su hijo. Con esta restricción
nos aseguramos mantener la estructura del árbol, pero aún nos falta mantener el
orden.

Para localizar el lugar adecuado del árbol donde insertar el nuevo nodo se
realizan comparaciones entre los nodos del árbol y el elemento a insertar. El
primer nodo que se compara es la raíz, si el nuevo nodo es menor que la raíz, la
búsqueda prosigue por el nodo izquierdo de éste. Si el nuevo nodo fuese
mayor, la búsqueda seguiría por el hijo derecho de la raíz.

Este procedimiento es recursivo, y su condición de parada es llegar a un nodo


que no tenga hijo en la rama por la que la búsqueda debería seguir. En este
caso el nuevo nodo se inserta en ese hueco, como su nuevo hijo.

Vamos a verlo con un ejemplo sobre el siguiente árbol:

Se quiere insertar el elemento 6.


Lo primero es comparar el nuevo elemento con la raíz. Como 6 > 4, entonces la
búsqueda prosigue por el lado derecho. Ahora el nuevo nodo se compara con
el elemento 8. En este caso 6 < 8, por lo que hay que continuar la búsqueda por
la rama izquierda. Como la rama izquierda de 8 no tiene ningún nodo, se
cumple la condición de parada de la recursividad y se inserta en ese lugar el
nuevo nodo.

Borrar

El borrado en árboles binarios de búsqueda es otra operación bastante sencilla


excepto en un caso. Vamos a ir estudiando los distintos casos.

Tras realizar la búsqueda del nodo a eliminar observamos que el nodo no tiene
hijos. Este es el caso más sencillo, únicamente habrá que borrar el elemento y ya
habremos concuído la operación.

Si tras realizar la búsqueda nos encontramos con que tiene un sólo hijo. Este
caso también es sencillo, para borrar el nodo deseado, hacemos una especie
de puente, el padre del nodo a borrar pasa a apuntar al hijo del nodo borrado.

Por último, el caso más complejo, si el nodo a borrar tiene dos hijos. En este
caso se debe sustitui el nodo a borrar por mayor de los nomdos menores del
nodo borrado, o por el menor de los nodos mayores de dicho nodo. Una vez
realizada esta sustitución se borra el nodo que sustituyó al nodo eliminado
(operación sencilla ya que este nodo tendrá un hijo a lo sumo).

Sobre el siguiente árbol queremos eliminar el elemento

6. Tenemos dos opciones para sustituirlo:

• El menor de sus mayores: 7.


• El mayor de sus menores: 4.

Vamos a sustituirlo por el 7 (por ejemplo). El árbol resultante sería el siguiente,


tras eliminar también el elemento 7 de su ubicación original.
Recorridos sobre arboles en anchura y
profundidad.
Hay tres métodos para visitar un árbol en profundidad: preorden, inorden, y
postorden. En inorden, se visita la raíz entre la visita de los subárboles izquierdo
y derecho, o sea, se visita primero el subárbol izquierdo, después la raíz, y por
último el subárbol derecho. En el caso de árboles generales o de orden N, se
visita primero el árbol más a la izquierda, a continuación la raíz, y por último el
resto de subárboles en secuencia.

Comparado a las estructuras de datos lineales como las listas


enlazadas y arreglos unidimensionales, que tienen un método canónico de
recorrido, las estructuras arborescentes pueden ser recorridas de muchas
maneras diferentes. Comenzando en la raíz de un árbol binario, hay tres pasos
principales que pueden ser realizados y el orden en la cual son realizados define
el tipo de recorrido. Estos pasos (en ningún orden particular) son: ejecución de
una acción en el nodo actual (referido como “visitando” el nodo), recorriendo al
nodo hijo de la izquierda, y recorriendo al nodo hijo de la derecha. Así el
proceso más fácilmente descrito a través de la recursión.
Los nombres dados para un estilo particular de recorrido vienen de la posición
del elemento de raíz con respecto a los nodos izquierdo y derecho. Imagine que
los nodos izquierdo y derecho son constantes en espacio, entonces el nodo raíz
pudiera colocarse a la izquierda del nodo izquierdo (pre-orden), entre el nodo
izquierdo y derecho (in-orden), o a la derecha del nodo derecho (post-orden).
Con el fin de ilustrar, se asume que los nodos izquierdos tienen siempre
prioridad sobre los nodos derechos. Este ordenamiento puede ser invertido
mientras el mismo orden sea asumido para todos los métodos de recorrido.
Recorrido en profundidad-primero
Árbol binario

• Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no


vacío en preorden, hay que realizar las siguientes operaciones
recursivamente en cada nodo, comenzando con el nodo de raíz:

1. Visite la raíz
2. Atraviese el sub-árbol izquierdo
3. Atraviese el sub-árbol derecho

• Inorden: (izquierdo, raíz, derecho). Para recorrer un árbol binario


no vacío en inorden (simétrico), hay que realizar las siguientes
operaciones recursivamente en cada nodo:

1. Atraviese el sub-árbol izquierdo


2. Visite la raíz
3. Atraviese el sub-árbol derecho

• Postorden: (izquierdo, derecho, raíz). Para recorrer un árbol


binario no vacío en postorden, hay que realizar las siguientes
operaciones recursivamente en cada nodo:

1. Atraviese el sub-árbol izquierdo


2. Atraviese el sub-árbol derecho
3. Visite la raíz
En general, la diferencia entre preorden, inorden y postorden es
cuándo se recorre la raíz. En los tres, se recorre primero el sub-árbol
izquierdo y luego el derecho.

• En preorden, la raíz se recorre antes que los recorridos de


los subárboles izquierdo y derecho
• En inorden, la raíz se recorre entre los recorridos de los
árboles izquierdo y derecho, y
• En postorden, la raíz se recorre después de los recorridos
por el subárbol izquierdo y el derecho
Preorden (antes), inorden (en medio), postorden (después).
Recorrido en anchura-primero
Los árboles también pueden ser recorridos en orden por nivel (de nivel en nivel),
donde visitamos cada nodo en un nivel antes de ir a un nivel inferior. Esto
también es llamado recorrido en anchura-primero o recorrido en anchura.

Árbol genérico
Para recorrer un árbol no vacío en orden de profundidad-primero,
hay que realizar las siguientes operaciones recursivamente en cada
nodo:

1. Realice la operación pre-orden


2. Para i=1 a n-1 haga
1. Visite al hijo[i], si existe
2. Realice la operación in-orden
3. Visite al hijo[n], si existe
4. Realice la operación post-orden
donde n es el número de nodos hijos. Dependiendo del problema
actual, las operaciones de pre-orden, in-orden o post-orden pueden
ser vacías (void), o usted puede querer visitar solamente un nodo de
hijo específico, así que estas operaciones pueden ser consideradas
opcionales. También, en la práctica, más de una de las operaciones
de pre-orden, in-orden y post-orden pueden ser requeridas. Por
ejemplo, al insertar en un árbol ternario, una operación de pre-orden
es realizada comparando elementos. Una operación de post-orden
puede luego ser necesitada para re balancear el árbol.

Intersección de un árbol.
Teniendo en cuenta la estructura de datos construida, recibimos consultas
consisten en rangos o puntos, y retornamos todos los rangos en el conjunto
original superponiendo esta entrada.

Nuestro objetivo es reportar el índice donde se toma el valor mínimo de la


intersección de igual que antes, no podemos usar el valor que está guardado
en el nodo, porque ese valor tiene en cuenta los elementos con índices que
están fuera del intervalo deseado. Esta vez, sin embargo, sólo es relevante el
subárbol derecho, porque el intervalo no importa.
Implementación de arboles binarios.
Hay diferentes posibilidades en función de que se consideren estructuras: · con
enlaces simples o dobles.

Estructura dinámica de registros con enlaces a los hijos.

TYPE ARBOL = POINTER TO NODO; NODO = RECORD valor: ITEM; izq, dch:
ARBOL END; La situación de la siguiente figura se presentará con árboles
construidos de la siguiente forma:

D := Arbol_binario(v, Crear, Crear); C := Arbol_binario(y, Arbol_binario(u, Crear,


Crear), D); B := Arbol_binario(z, D, Arbol_binario(w, Crear, Crear)); A :=
Arbol_binario(x, B, C);

Sin embargo, este tipo de construcciones no suele ser deseable, ya que un


cambio en un nodo produce como efecto lateral ese mismo cambio en otro
nodo. Por ejemplo si implementamos la función Map con este árbol, y la
llamamos con la función Multiplica_por_2, resulta que los elementos
compartidos los multiplicará por 4 (en este caso), o por 2 , siendo n el número
de veces n que es compartido. · Permite obtener una implementación fácil y
rápida para todas las operaciones. · Permite aplicar de forma casi directa las
operaciones de la misma forma recursiva con que las hemos visto en la
especificación algebraica.

También podría gustarte