- 1

Grafos y Árboles: Estructuras de Datos Avanzadas
06:48 - 2

Estructuras de Datos: Introducción a Árboles y Sus Propiedades
07:12 - 3

Recursión: Concepto y Aplicaciones Prácticas con Ejemplos
09:11 - 4

Aplicaciones Prácticas de Grafos en Tecnología e Industria
05:16 - 5
Representación de Grafos: Matriz y Lista de Adyacencia
01:02
Recorridos y Profundidad en Árboles Binarios y Enearios
Clase 9 de 52 • Curso de Algoritmos Avanzados: Grafos y Árboles
Contenido del curso
- 6

Búsqueda en Profundidad (DFS) en Árboles y Grafos
04:50 - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 - 8
Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 - 9

Recorridos y Profundidad en Árboles Binarios y Enearios
07:09 - 10

Suma de Caminos en Árboles Binarios
02:05 - 11

Suma de Números de Raíz a Hoja en Árboles
07:32 - 12
Playground: Sum Root to Leaf Numbers
00:00 - 13

Implementación de Algoritmo DFS en Árboles Binarios con Golang
15:03 - 14

Resolución del Problema de Número de Islas con DFS
02:32 - 15

Conteo de Islas en Matrices con DFS
08:51 - 16
Playground: Number of Islands
00:00 - 17

Implementación de "Número de Islas" con Recursión en Python
10:18 - 18
Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 - 19
Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19
- 20

Algoritmo BFS: Recorrido en Anchura de Grafos y Árboles
02:05 - 21

Implementación de BFS en Árboles usando Python
08:43 - 22

Movimiento mínimo de caballo en ajedrez infinito
02:55 - 23

Resolviendo el Problema Mínimo de Movimiento del Caballo en Ajedrez
08:11 - 24
Playground: Minimum Knights Moves
00:00 - 25

Resolución de Problemas de Caballos de Ajedrez con BFS en Python
17:49 - 26

Propagación de Plagas en Cultivos: Cálculo de Días para Contagio Total
03:50 - 27

Resolución de Rotting Oranges usando BFS
08:44 - 28
Playground: Rotting Oranges
00:00 - 29

Propagación de Plagas en Matrices usando BFS en Java
23:44 - 30

Construcción de Puentes Cortos entre Islas en Matrices Binarias
03:39 - 31

Resolución del Problema Shortest Bridge con DFS y BFS
07:36 - 32
Playground: Shortest Bridge Between Islands
00:00 - 33

Búsqueda del camino más corto entre islas usando BFS en Python
14:58 - 34
Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 - 35
Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47
- 36

Algoritmo Backtracking: Solución de Problemas Complejos
04:21 - 37

Combinaciones de Letras en Números Telefónicos
01:52 - 38

Combinaciones de Letras a partir de un Número de Teléfono
09:20 - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 - 40
Playground: Letter Combinations of a Phone Number
00:00 - 41

Generación de Direcciones IP Válidas a partir de Cadenas Numéricas
03:51 - 42

Generación de IPs válidas con backtracking en C++
28:17 - 43
Playground: Restore IP Addresses
00:00 - 44

Búsqueda de Palabras en Matrices: Solución y Complejidad
02:55 - 45

Búsqueda de Palabras en Matrices usando Backtracking y DFS
08:31 - 46
Playgrund: Word Search
00:00 - 47

Implementación de búsqueda de palabras en matrices con DFS en JavaScript
18:19 - 48
Resolución del problema de las n reinas en ajedrez
01:08 - 49
Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 - 50
Combinaciones y Permutaciones con Backtracking
02:14
¿Cómo recorrer un árbol binario?
Un árbol binario es una estructura de datos muy utilizada en disciplinas como la informática y la matemática. Comprender cómo recorrerlo es esencial para su manejo y aplicación en la solución de problemas complejos. En este aprendizaje, abordaremos tres tipos de recorridos de árboles: in order, preorder y postorder, que permiten visitar cada nodo del árbol en un orden específico.
¿Qué es el recorrido in order?
El recorrido in order se centra en recorrer primero el hijo izquierdo, luego el nodo actual, y finalmente el hijo derecho. Este método es indispensable para obtener los nodos de un árbol o subárbol de forma ordenada.
In order con un árbol binario:
def in_order(nodo):
if nodo:
in_order(nodo.izquierdo)
print(nodo.valor) # Mostrar o procesar el nodo actual
in_order(nodo.derecho)
En este código, primero se llama a la función para el hijo izquierdo, luego se procesa el nodo actual, y finalmente se invade el hijo derecho.
¿Qué es el recorrido preorder?
Preorder inicia siempre en el nodo actual antes de pasar a sus hijos. Es especialmente útil en situaciones donde es crucial procesar el nodo antes de profundizar en él.
Preorder con un árbol binario:
def preorder(nodo):
if nodo:
print(nodo.valor) # Mostrar o procesar el nodo actual
preorder(nodo.izquierdo)
preorder(nodo.derecho)
En el caso de árboles enearios, preorder consistiría en gestionar el nodo actual y después proceder con todos sus hijos, independientemente de si son más de dos.
¿Qué es el recorrido postorder?
Postorder, como su nombre indica, está diseñado para procesar el nodo al final, siendo los hijos el foco inicial del recorrido.
Postorder con un árbol binario:
def postorder(nodo):
if nodo:
postorder(nodo.izquierdo)
postorder(nodo.derecho)
print(nodo.valor) # Mostrar o procesar el nodo actual
Este método es ideal para operaciones donde es obligatorio finalizar con la revisión de los hijos, como las evaluaciones aritméticas.
¿Cómo calcular la profundidad de un árbol?
La profundidad de un árbol, o la longitud máxima de un camino, puede ser un aspecto fundamental en la evaluación de su estructura. La profundidad máxima se determina partiendo desde la raíz hacia la hoja más lejana.
¿Cómo se implementa el cálculo recursivo de la profundidad?
El cálculo de la profundidad es frecuentemente implementado de forma recursiva. Aquí un ejemplo de código sobre cómo podría ejecutarse:
def profundidad(nodo):
if nodo is None:
return 0
else:
izquierda = profundidad(nodo.izquierdo)
derecha = profundidad(nodo.derecho)
return max(izquierda, derecha) + 1
Este algoritmo verifica el nodo izquierdo y derecho, evocando la misma función para calcular cuál de los caminos es el más largo, sumándole uno para incluir el nodo actual.
¿Cómo modificar el algoritmo para árboles enearios?
Cuando se trabaja con árboles enearios, es necesario iterar por todos los hijos en lugar de simplemente hacerlo con el hijo izquierdo y el derecho:
def profundidad_ene(nodo):
if nodo is None:
return 0
else:
max_profundidad = 0
for hijo in nodo.hijos:
max_profundidad = max(max_profundidad, profundidad_ene(hijo))
return max_profundidad + 1
Este patrón tiene en cuenta cada uno de los hijos del nodo, asegurando que ninguno quede sin explorar.
Sigue practicando con estas técnicas para dominar la estructura y el recorrido de los árboles. ¡El futuro de tu aprendizaje en estructuras de datos es prometedor!