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
08:42 min - 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
Qué es un árbol en estructuras de datos
Resumen
Un árbol en programación es una estructura de datos no lineal que organiza información de forma jerárquica, como si fuera un árbol genealógico o un organigrama empresarial. Entender qué es un árbol, cómo se compone y qué propiedades tiene te servirá para resolver problemas algorítmicos donde la jerarquía importa.
¿Qué es un árbol y por qué es un tipo de grafo?
Un árbol es un caso especial de grafo. La diferencia es que tiene un punto de entrada único llamado raíz, desde donde se desprenden los demás nodos siguiendo una dirección clara.
Piensa en una empresa: arriba hay un jefe, debajo sus empleados directos y, debajo de ellos, más personas a su cargo. Esa misma lógica de jerarquía es la que modelamos cuando trabajamos con árboles en estructuras de datos.
¿Qué diferencia hay entre un árbol y un grafo? Un árbol es un grafo con un nodo raíz y dirección jerárquica, sin ciclos. Cualquier grafo puede tener múltiples puntos de entrada y conexiones libres.
¿Cómo se estructuran los nodos padres e hijos?
La terminología de los árboles toma prestado el lenguaje familiar. Cada nodo puede tener hijos, y cuando hablamos de los nodos que están más arriba en la estructura los llamamos ancestros, igual que en un árbol genealógico.
Desde el nodo raíz se desprenden los hijos izquierdo y derecho, y cada uno de esos hijos puede convertirse a su vez en padre de nuevos nodos. Así se construye la jerarquía completa.
¿Qué es un árbol binario y un árbol n-ario?
Un árbol binario es aquel donde cualquier nodo tiene a lo sumo dos hijos: uno a la izquierda y otro a la derecha. Es la forma más común que verás en ejercicios de algoritmos.
Pero no toda jerarquía se modela con dos hijos. Cuando un nodo puede tener N cantidad de hijos hablamos de un árbol n-ario. Por ejemplo, si modelas una empresa donde un líder puede tener tres personas a cargo, ese sería un árbol n-ario de grado tres.
Lo que nunca cambia es que un árbol tiene una sola cabeza: un único nodo raíz desde el que parte toda la estructura.
¿Cuáles son las propiedades clave de un árbol?
Antes de resolver problemas con árboles necesitas dominar la notación. Estos son los conceptos que aparecerán una y otra vez en algoritmos.
¿Qué son los niveles y la altura de un árbol?
Cada nivel de un árbol es una generación de nodos. La raíz está en el nivel uno, sus hijos en el nivel dos, los nietos en el nivel tres, y así sucesivamente.
La altura de un árbol se define por la cantidad de niveles que tiene. Si tu árbol tiene tres niveles, su altura es tres. Algunos textos también usan la palabra generación para referirse a este mismo concepto.
¿Cómo se calcula la altura de un árbol? Cuenta el número de niveles desde la raíz hasta el nodo hoja más profundo. Si hay tres niveles, la altura es tres.
¿Qué diferencia un árbol lleno de uno no lleno?
Un árbol lleno es aquel donde todos los nodos, excepto las hojas, tienen la cantidad máxima de hijos posibles. En un árbol binario lleno, cada padre tiene exactamente dos hijos.
Un árbol no lleno, en cambio, tiene al menos un nodo padre con menos hijos de los que podría tener. Si un nodo de un árbol binario solo tiene un hijo en lugar de dos, el árbol ya no está lleno.
¿Qué son los nodos hoja?
Los nodos hoja son los últimos nodos de cada camino, los que ya no tienen hijos. Son los extremos finales de la estructura, donde termina la jerarquía.
En cualquier árbol vas a tener varios nodos hoja, uno por cada rama que llega a su fin.
¿Qué son el orden y el grado de un árbol?
Aquí hay una distinción sutil pero importante que conviene tener clara.
- Orden: la cantidad máxima de hijos que un nodo puede tener según la definición del árbol. En un árbol binario el orden es dos. En un n-ario donde permites hasta tres hijos, el orden es tres.
- Grado: la cantidad máxima de hijos que un nodo realmente tiene en tu árbol concreto. Si definiste un árbol con orden tres pero ningún nodo llega a tener tres hijos, el grado podría ser dos.
La diferencia se nota cuando defines la estructura teórica frente a lo que efectivamente construiste con tus datos.
Dominar estos conceptos (raíz, padres, hijos, ancestros, hojas, niveles, altura, árbol lleno, orden y grado) te prepara para el siguiente paso: aplicar recursión, una técnica fundamental no solo para árboles y grafos, sino para la programación en general.
¿Qué jerarquía de tu día a día modelarías como árbol? Cuéntame en los comentarios cómo la estructurarías.