0% encontró este documento útil (0 votos)
88 vistas34 páginas

Presentación Arboles

El documento describe las estructuras de datos de árboles binarios, incluida su terminología, tipos, operaciones y métodos de recorrido. Explica que los árboles binarios son estructuras recursivas donde cada nodo puede tener hasta dos hijos y describe los tipos de árboles binarios como llenos, completos y degenerados. También cubre temas como la conversión de árboles generales a binarios, las operaciones de inserción, búsqueda, eliminación y los métodos de recorrido pre-orden e in-orden.

Cargado por

Luz Arias
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
88 vistas34 páginas

Presentación Arboles

El documento describe las estructuras de datos de árboles binarios, incluida su terminología, tipos, operaciones y métodos de recorrido. Explica que los árboles binarios son estructuras recursivas donde cada nodo puede tener hasta dos hijos y describe los tipos de árboles binarios como llenos, completos y degenerados. También cubre temas como la conversión de árboles generales a binarios, las operaciones de inserción, búsqueda, eliminación y los métodos de recorrido pre-orden e in-orden.

Cargado por

Luz Arias
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 34

ARBOLES

BINARIOS
ESTRUCTURAS DINAMICAS LINEALES
Listas enlazadas
Pilas
Colas Crecen a medida que se
Bi-colas ejecuta el programa
Fácil funcionamiento por
DATO medio de nodos
Son listas secuenciales
Siempre hay un elemento
SIGUIENTE “siguiente”
ESTRUCTURAS NO DINAMICAS LINEALES
ARBOLES GRAFOS

No son necesariamente
secuencias
Pueden tener más de un
elemento “siguiente”
ARBOLES
Estructuras de bifurcación (Hasta dos opciones posibles),
conectados por un conjunto de líneas dirigidas (ramas)
Pueden ser representados de dos modos diferentes:
• Mediante punteros
• Mediante vectores / listas enlazadas

Nodos hermanos: Descienden del mismo nodo al


mismo nivel
Orden: Cantidad de hijos que tiene un nodo.
Raíz: Primer elemento/nodo
Hojas: Los ultimos nodos que no tienen hijos
Rama Raíz -> Nivel 0
A
Nodos Hijo-> Nivel 1
B C
Hojas -> Nivel 2
D E F
Longitud de camino: Numero de ramas para llegar a
Hermanos un nodo desde la raíz
Altura de un nodo: Numero de nodos que toca ver la
altura comenzando desde las hojas del nodo
Profundidad de un nodo: Igual que la altura pero
comenzando por la raiz
ARBOLES BINARIOS class Nodo {
int dato;
Son de orden 2. Estructura recursiva Nodo derecho;
Nodo izquierdo;
Nodo padre;
B Nodo(int dato) {
Hijo this.dato = dato;
Hijo this.derecho = null;
izquierdo
D E derecho this.izquierdo = null;
this.padre = null;
}
}

Data class Nodo(val dato: Int, var derecho: Nodo? = null, var
izquierdo: Nodo? = null, var Padre: Nodo? = null)
TERMINOLOGIA DE LOS ARBOLES BINARIOS
Dos árboles binarios
son similares si tienen la misma estructura
son equivalentes si son similares y contienen la misma
información (Figura 13.5).

Un árbol binario está equilibrado si las alturas de los dos


subárboles de cada nodo del árbol se diferencian en una
unidad como máximo.

(Altura Izq - Altura Der) ≤ 1


TIPOS DE ARBOLES
BINARIOS
ARBOLES LLENO
Todos los nodos excepto las hojas tienen dos hijos

B C

D E F G
ARBOLES COMPLETO
No todos los nodos finalizan en el mismo nivel (usualmente el
subárbol izquierdo termina más abajo

B C

D E F G

H I J K
ARBOLES DEGENERADO
Solo poseen un hijo por un solo lado

D
CONVERSIÓN DE
ARBOL GENERAL A
BINARIO
1. La raíz de B es la raíz de A.
2. Enlazar al nodo raíz con el camino que conecta
el nodo más a la izquierda (su hijo).
3. Enlazar este nodo con los restantes
descendientes del nodo raíz en un camino, con lo
que se forma el nivel 1.

REPETIR ESTOS PASOS


HASTA MONTAR TODOS
EN EL NUEVO ARBOL
EJEMPLO VISUAL:

B D
C

E F G

J
H I
En el árbol binario
NUEVO ARBOL: A resultante los punteros
izquierdos son siempre de
un nodo padre a su
B primer hijo en el árbol
general original y los
C
derechos son siempre
D desde un nodo de sus
E descendientes en el árbol
original.
F
H I
J
G
ARBOL DE
BÚSQUEDA Y
OPERACIONES
ARBOLES BINARIO DE BUSQUEDA
Cuando todos los datos del nodo raíz están distribuidos de forma que
los elementos del subárbol izquierdo son de menor valor y los de la
derecha de mayor valor.
12

10 15

5 11 14 57

-30 6
INSERTAR UN NUEVO NODO
1. Comprobación de Duplicados:
Antes de insertar un elemento en el árbol, se verifica que no
exista previamente para evitar duplicados.
2. Recorrido del Árbol:
La inserción comienza desde el nodo raíz, descendiendo hacia la
izquierda o la derecha según el valor a insertar en comparación
con el valor del nodo actual.
3. Selección del Nodo de Inserción:
Cuando no se puede continuar descendiendo, el nuevo
elemento se coloca a la izquierda o derecha del nodo actual,
según sea menor o mayor que el valor del nodo.
INSERTAR UN NUEVO NODO
# Definición de la clase Nodo que representa un nodo en el árbol binario.
class Nodo:
def __init__(self, valor):
self.valor = valor # Valor almacenado en el nodo.
self.izquierda = None # Referencia al hijo izquierdo.
self.derecha = None # Referencia al hijo derecho.

# Función para insertar un valor en el árbol binario.


def insertar(raiz, valor):
if raiz is None: # Si la raíz es None, crea un nuevo nodo con el valor.
return Nodo(valor)

if valor < raiz.valor: # Si el valor es menor que el valor de la raíz, inserta a la izquierda.
raiz.izquierda = insertar(raiz.izquierda, valor)
elif valor > raiz.valor: # Si el valor es mayor que el valor de la raíz, inserta a la derecha.
raiz.derecha = insertar(raiz.derecha, valor)

return raiz
INSERTAR UN NUEVO NODO
# Función para mostrar los nodos del árbol en orden ascendente.
def mostrar_arbol(raiz):
if raiz is not None:
mostrar_arbol(raiz.izquierda) # Primero muestra los nodos izquierdos (menores).
print(raiz.valor) # Luego muestra el valor del nodo actual.
mostrar_arbol(raiz.derecha) # Finalmente muestra los nodos derechos (mayores).

# Crear el árbol vacío.


raiz = None

# Insertar nodos en el árbol.


raiz = insertar(raiz, 10)
raiz = insertar(raiz, 5)
raiz = insertar(raiz, 15)
raiz = insertar(raiz, 3)
raiz = insertar(raiz, 7)

# Mostrar el árbol en orden.


mostrar_arbol(raiz)
MOSTRAR EL ARBOL COMPLETO
def mostrar_arbol(arbol, cont):
if arbol is None: # Si el árbol está vacío
return
else:
mostrar_arbol(arbol.der, cont + 1)
for i in range(cont):
print(" ", end="")
print(arbol.dato)
mostrar_arbol(arbol.izq, cont + 1)
BUSCAR UN NODO ESPECIFICO
Función busquedaEnUnArbol(arbol: Nodo, n: Entero) -> Boolean
Si arbol es nulo
Devolver falso
Sino, Si el dato en arbol es igual a n
Devolver verdadero
Sino, Si n es menor que el dato en arbol
Llamar recursivamente a busquedaEnUnArbol con (arbol->izq, n)
Sino
Llamar recursivamente a busquedaEnUnArbol con (arbol->der, n)
Fin Si
Fin de la Función
Función reemplazar(arbol: Nodo, nuevoNodo: Nodo)
Si arbol->padre existe ELIMINAR UN NODO
Si arbol->dato es igual al dato en el nodo izquierdo del padre de arbol
arbol->padre->izq = nuevoNodo
Sino Si arbol->dato es igual al dato en el nodo derecho del padre de arbol
arbol->padre->der = nuevoNodo
Función destruirNodo(nodoAEliminar: Nodo)
Fin Si
nodoAEliminar->izq = NULL
Fin Si
nodoAEliminar->Der = NULL
Si nuevoNodo existe
eliminar nodoAEliminar
nuevoNodo->padre = arbol->padre
Fin de la Función
Fin Si
Fin de la Función
Función minimo(arbol: Nodo) -> Nodo
Si arbol es nulo
Devolver nulo
Si arbol->izq existe Devolver minimo(arbol->izq)
Sino Devolver arbol
Fin Si
Fin de la Función
Función eliminarNodo(nodoEliminar: Nodo)
Si nodoEliminar->izq existe y nodoEliminar->der existe
menor = encontrarElMenor(nodoEliminar->der)
nodoEliminar->dato = menor->dato
eliminarNodo(menor)
Sino Si nodoEliminar->izq existe
reemplazar(nodoEliminar, nodoEliminar->izq)
destruirNodo(nodoEliminar)
Sino Si nodoEliminar->der existe
reemplazar(nodoEliminar, nodoEliminar->der)
destruirNodo(nodoEliminar)
Sino
reemplazar(nodoEliminar, NULL)
destruirNodo(nodoEliminar)
Fin Si
Fin de la Función
MÉTODOS
PARA
RECORRER UN
ÁRBOL BINARIO
RECORRIDO PRE-ORDEN

50
32 53

17 36 68
RECORRIDO IN-ORDEN
50
32 53

17 36 68
RECORRIDO POST-ORDEN
50
32 53

17 36 68
RECORRIDO PRE-ORDEN(JAVA)
RECORRIDO POST-ORDEN(JAVA)
RECORRIDO IN-ORDEN(JAVA)
EJEMPLIFICACIÓN DE LOS RECORRIDOS Y
OPERACIONES EN C++
Joyanes Aguilar, L. (2008).
Fundamentos de programación:
algoritmos y estructura de datos
y objetos. PP 480-490

Iyanu A. (2018). Kotlin Programming By Example


GRACIAS
POR SU
ATENCIÓN

También podría gustarte