Contenido del curso
DFS
- 6

Cómo recorre nodos el algoritmo DFS
04:49 min - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 min - 8

Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 min - 9

Inorder, Preorder y Postorder en árboles
07:09 min - 10

Suma de caminos raíz a hoja en árboles
02:04 min - 11

Suma de caminos raíz a hoja con DFS
07:31 min - 12

Playground: Sum Root to Leaf Numbers
- 13

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

Número de islas con DFS en matrices
02:32 min - 15

Problema de islas resuelto con DFS
08:50 min - 16

Playground: Number of Islands
- 17

Número de islas con DFS recursivo en Python
10:18 min - 18

Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 min - 19

Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19 min
BFS
- 20

Cómo BFS recorre grafos por niveles
02:05 min - 21

Implementación de BFS con colas en Python
Viendo ahora - 22

Mínimos movimientos del caballo en ajedrez
02:55 min - 23

Minimum Knight's Move con BFS
08:11 min - 24

Playground: Minimum Knights Moves
- 25

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

Propagación BFS en Rotting Oranges
03:50 min - 27

Resolución de Rotting Oranges usando BFS
08:43 min - 28

Playground: Rotting Oranges
- 29

Implementación de BFS para naranjas podridas
23:44 min - 30

Puente más corto entre islas con BFS
03:38 min - 31

Shortest Bridge: combina DFS y BFS
07:35 min - 32

Playground: Shortest Bridge Between Islands
- 33

Shortest Bridge con DFS y BFS en Python
14:57 min - 34

Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 min - 35

Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47 min
Backtrack
- 36

Backtracking para encontrar soluciones válidas
04:20 min - 37

Combinaciones de letras en teclado telefónico
01:51 min - 38

Combinaciones de teclado con backtracking
09:19 min - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 min - 40

Playground: Letter Combinations of a Phone Number
- 41

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

Backtracking para generar IPs válidas
28:16 min - 43

Playground: Restore IP Addresses
- 44

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

Word Search con DFS y backtracking
08:30 min - 46

Playgrund: Word Search
- 47

Búsqueda de palabras en matrices con DFS
18:18 min - 48

Resolución del problema de las n reinas en ajedrez
01:08 min - 49

Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 min - 50

Combinaciones y Permutaciones con Backtracking
02:14 min
Próximos pasos
Implementación de BFS con colas en Python
Resumen
Recorrer un árbol nivel por nivel suena complicado hasta que entiendes la lógica detrás de BFS (Breadth First Search). Aprenderás a implementar este algoritmo en Python usando colas, contar niveles del árbol y guardar el orden de visita, una habilidad clave para entrevistas técnicas y problemas de grafos.
¿Qué es BFS y por qué se implementa con colas?
BFS recorre un árbol o grafo nivel por nivel, visitando primero todos los nodos cercanos a la raíz antes de bajar al siguiente nivel. La estructura natural para lograrlo es una cola, porque respeta el orden FIFO: lo primero que entra es lo primero que sale.
¿Cuál es la diferencia entre BFS y DFS? BFS usa colas y recorre por niveles. DFS usa pilas y baja en profundidad antes de explorar hermanos. Ambos visitan todos los nodos, pero en orden distinto.
La función parte de un nodo raíz, aunque en otros problemas podrías recibir coordenadas de una cuadrícula o cualquier estructura que represente conexiones.
¿Cómo se construye la función BFS desde cero?
La idea es devolver una lista con los nodos en el orden en que los visitas. Si la raíz es nula, retornas una lista vacía sin más cálculos.
La estructura básica de la función incluye:
- Una lista
respuestapara guardar los nodos visitados en orden. - Una
colainicializada con la raíz como primer elemento. - Una variable
nivelque arranca en cero y crece con cada capa procesada. - Un ciclo
whileque itera mientras la cola tenga elementos.
python def bfs(raiz): if not raiz: return [] respuesta = [raiz] cola = [raiz] nivel = 0 while cola: for _ in range(len(cola)): nodo_actual = cola.pop(0) for hija in nodo_actual.hijas: cola.append(hija) respuesta.append(hija) nivel += 1 print(f"La cantidad de niveles de este árbol es {nivel}") return respuesta
El detalle fino está en la línea del for _ in range(len(cola)): capturas cuántos nodos hay en el nivel actual antes de empezar a sacarlos. Así, aunque la cola crezca al añadir hijos, solo procesas los del nivel que te interesa.
¿Cómo se cuentan los niveles del árbol con BFS?
Cada vez que terminas de procesar todos los nodos del nivel actual, sumas uno a la variable nivel. Como el ciclo interno solo recorre los elementos que había al inicio de esa iteración, el conteo refleja exactamente la profundidad del árbol.
¿Por qué uso un guion bajo en el for? Porque no necesitas el índice, solo quieres iterar tantas veces como nodos haya en ese nivel. El underscore es la convención en Python para variables que no usarás.
¿Cómo adapto BFS para árboles binarios o n-arios?
El ejemplo anterior asume un árbol n-ario, donde cada nodo tiene un atributo hijas que es una lista. Por eso iteras con for hija in nodo_actual.hijas.
Si trabajas con un árbol binario clásico, donde cada nodo tiene izquierda y derecha, cambias el bucle interno por dos verificaciones simples:
- Si
nodo_actual.izquierdaexiste, hacescola.append(nodo_actual.izquierda). - Si
nodo_actual.derechaexiste, hacescola.append(nodo_actual.derecha).
La lógica de la cola, los niveles y la respuesta se mantiene idéntica. Solo cambia cómo accedes a los hijos.
¿Cómo imprimo el árbol mientras lo recorro?
Dentro del ciclo, después de extraer nodo_actual con cola.pop(0), puedes imprimir su valor con print(nodo_actual.valor). Eso te da en consola el recorrido completo en orden BFS, útil para depurar y verificar que tu implementación funciona.
¿Cuándo termina el ciclo while?
El while cola sigue iterando hasta que la cola quede vacía. Esto ocurre cuando llegas al último nivel del árbol, donde los nodos ya no tienen hijos que agregar. En cada vuelta sacas los actuales y metes a los siguientes; cuando no hay siguientes, la cola se vacía y el ciclo termina de forma natural.
Esa es la elegancia de BFS con colas: no necesitas saber cuántos niveles tiene el árbol de antemano, la propia estructura te lleva hasta el final.
¿Qué problema resolverías tú con BFS? Comparte en los comentarios cómo aplicarías esta lógica en una cuadrícula o en un grafo de conexiones.