Introducción

1

Grafos y Árboles: Estructuras de Datos Avanzadas

2

Estructuras de Datos: Introducción a Árboles y Sus Propiedades

3

Recursión: Concepto y Aplicaciones Prácticas con Ejemplos

4

Aplicaciones Prácticas de Grafos en Tecnología e Industria

5

Representación de Grafos: Matriz y Lista de Adyacencia

DFS

6

Búsqueda en Profundidad (DFS) en Árboles y Grafos

7

Implementación de DFS recursivo para búsqueda en árboles

8

Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo

9

Recorridos y Profundidad en Árboles Binarios y Enearios

10

Suma de Caminos en Árboles Binarios

11

Suma de Números de Raíz a Hoja en Árboles

12

Playground: Sum Root to Leaf Numbers

13

Implementación de Algoritmo DFS en Árboles Binarios con Golang

14

Resolución del Problema de Número de Islas con DFS

15

Conteo de Islas en Matrices con DFS

16

Playground: Number of Islands

17

Implementación de "Número de Islas" con Recursión en Python

18

Ejercicios Prácticos de Búsqueda en Profundidad (DFS)

19

Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes

BFS

20

Algoritmo BFS: Recorrido en Anchura de Grafos y Árboles

21

Implementación de BFS en Árboles usando Python

22

Movimiento mínimo de caballo en ajedrez infinito

23

Resolviendo el Problema Mínimo de Movimiento del Caballo en Ajedrez

24

Playground: Minimum Knights Moves

25

Resolución de Problemas de Caballos de Ajedrez con BFS en Python

26

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

27

Resolución de Rotting Oranges usando BFS

28

Playground: Rotting Oranges

29

Propagación de Plagas en Matrices usando BFS en Java

30

Construcción de Puentes Cortos entre Islas en Matrices Binarias

31

Resolución del Problema Shortest Bridge con DFS y BFS

32

Playground: Shortest Bridge Between Islands

33

Búsqueda del camino más corto entre islas usando BFS en Python

34

Búsqueda en anchura: Ejercicios prácticos y aplicaciones

35

Ejercicios avanzados de búsqueda en anchura (BFS) en programación

Backtrack

36

Algoritmo Backtracking: Solución de Problemas Complejos

37

Combinaciones de Letras en Números Telefónicos

38

Combinaciones de Letras a partir de un Número de Teléfono

39

Generación de combinaciones de letras con teclados numéricos en C++

40

Playground: Letter Combinations of a Phone Number

41

Generación de Direcciones IP Válidas a partir de Cadenas Numéricas

42

Generación de IPs válidas con backtracking en C++

43

Playground: Restore IP Addresses

44

Búsqueda de Palabras en Matrices: Solución y Complejidad

45

Búsqueda de Palabras en Matrices usando Backtracking y DFS

46

Playgrund: Word Search

47

Implementación de búsqueda de palabras en matrices con DFS en JavaScript

48

Resolución del problema de las n reinas en ajedrez

49

Ejercicios de Backtracking: Combinaciones y Permutaciones

50

Combinaciones y Permutaciones con Backtracking

Próximos pasos

51

Algoritmos de Grafos: MIN/MAX-HIP, TRI, Topological Sort y Dijkstra

52

Algoritmos y Estructuras de Datos en la Ingeniería

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Suma de Caminos en Árboles Binarios

10/52
Recursos

¿Cómo se define el problema "Some root to leaf numbers"?

¡Bienvenido a tu viaje por el fascinante mundo de los árboles binarios! Hoy exploramos un problema intrigante: el cálculo de la suma de números formados por caminos desde la raíz hasta las hojas de un árbol binario. Imagina un árbol donde cada nodo contiene un dígito del 0 al 9. Tu reto es sumar todos los números que se forman al recorrer estos caminos. Este problema no solo desafía tus habilidades lógicas, sino que también te invita a aplicar conocimientos previos y pensar creativamente para encontrar soluciones optimizadas. ¡Sumérgete en este desafío y mejora tus habilidades de resolución de problemas!

¿Qué significa un camino desde la raíz hasta una hoja?

Para entender la complejidad de este problema, primero debemos entender qué es un camino desde la raíz hasta una hoja en un árbol binario. Un árbol binario es una estructura jerárquica donde cada nodo tiene un valor y al menos un nodo hijo, excepto las hojas, que no tienen hijos.

  • Raíz: Es el nodo inicial de donde parte todo el árbol.
  • Nodo hoja: Es aquel nodo que no tiene nodos hijos.
  • Camino: Es la secuencia de nodos desde la raíz hasta cualquier nodo hoja.

En nuestro problema, al recorrer el árbol desde la raíz hasta una hoja formamos un número concatenando los valores de los nodos en orden.

¿Cómo se calcula y suma los números formados?

Para abordar el problema, pensemos en un ejemplo sencillo. Supongamos que el árbol tiene la siguiente estructura:

  • Nodo raíz: 1
  • Hijo izquierdo de la raíz: 2
  • Hijo derecho de la raíz: 3

Siguiendo desde la raíz a los nodos hoja:

  1. Camino raíz a hoja izquierda: 1 -> 2 forma el número 12.
  2. Camino raíz a hoja derecha: 1 -> 3 forma el número 13.

En este caso, la suma total de los números formados sería 12 + 13 = 25. La clave está en concatenar los valores de los nodos al recorrer el árbol y sumar los resultados de todos los caminos posibles.

¿Cómo resolverías el problema con lo que has aprendido?

La solución a este problema no solo requiere habilidades para manipular árboles, sino también la capacidad de aplicar soluciones previas de forma innovadora. Aquí te ofrecemos algunos consejos para abordar este desafío:

  • Recursión: Utilizar un enfoque recursivo es altamente efectivo para recorrer el árbol, ya que nos permite descender de la raíz a las hojas acumulando el valor numérico del camino recorrido.
  • Backtracking: Considera emplear backtracking para explorar todos los posibles caminos, asegurándote de regresar y explorar caminos alternativos desde cada nodo.
  • Memorización: Almacenar cálculos intermedios puede ayudar a optimizar el tiempo de ejecución cuando se lidia con árboles grandes.

Te animamos a que utilices estos conceptos y lleves a cabo tus propias pruebas. Aprovecha tus conocimientos adquiridos previamente y no dudes en compartir tus ideas y hallazgos en la sección de comentarios. ¡Tu creatividad y perseverancia son las llaves para dominar este reto!

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tengo una pregunta, dices que solo das el nodo raiz, cómo obteemos el valor de los demás nodos? vamos siguiendo el orden numèrico ?
Bueno este ejercicio se me hizo un poco complejo pero aqui esta mi solución en java ```java public class SumRootToLeaf { public static void main(String[] args) { System.out.println("********** Sum Root To Leaf"); Node<Integer> root = buildRoot(); System.out.println(calculateSum(root)); } private static Integer calculateSum(Node<Integer> node, String prevVal) { if(node == null){ return 0; } String actualVal = prevVal + node.value; int numericVal = Integer.parseInt(actualVal); if(node.left == null && node.right == null){ return numericVal; } return calculateSum(node.left, actualVal) + calculateSum(node.right, actualVal); } static Integer calculateSum(Node<Integer> node){ return calculateSum(node, ""); } private static Node<Integer> buildRoot() { Node<Integer> granSonLL = new Node<>(3); Node<Integer> granSonLR = new Node<>(4); Node<Integer> sonL = new Node<>(2, granSonLL, granSonLR); Node<Integer> granSonRL = new Node<>(6); Node<Integer> granSonRR = new Node<>(7); Node<Integer> sonR = new Node<>(5, granSonRL, granSonRR); return new Node<>(1, sonL, sonR); } static class Node<T> { T value; Node<T> left; Node<T> right; public Node(T value) { this.value = value; } public Node(T value, Node<T> left, Node<T> right){ this.value = value; this.left = left; this.right = right; } } } ```