Categorías
Algorithms Interview

LeetCode – Path Sum II (Java)

Dado un árbol binario y una suma, encuentre todas las rutas de raíz a hoja donde la suma de cada ruta sea igual a la suma dada.

Por ejemplo, dado el siguiente árbol binario y suma = 22,

              5
             / 
            4   8
           /   / 
          11  13  4
         /      / 
        7    2  5   1

el método devuelve lo siguiente:

[
   [5,4,11,2],
   [5,8,4,5]
]

Análisis

Este problema se puede convertir en un problema típico de búsqueda en profundidad. Un algoritmo de búsqueda en profundidad recursiva generalmente requiere una llamada de método recursiva, una referencia al resultado final, un resultado temporal, etc.

Solución Java

public List<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if(root == null) 
        return result;
 
    ArrayList<Integer> l = new ArrayList<Integer>();
    l.add(root.val);
    dfs(root, sum-root.val, result, l);
    return result;
}
 
public void dfs(TreeNode t, int sum, ArrayList<ArrayList<Integer>> result, ArrayList<Integer> l){
    if(t.left==null && t.right==null && sum==0){
        ArrayList<Integer> temp = new ArrayList<Integer>();
        temp.addAll(l);
        result.add(temp);
    }
 
    //search path of left node
    if(t.left != null){
        l.add(t.left.val);
        dfs(t.left, sum-t.left.val, result, l);
        l.remove(l.size()-1);
    }
 
    //search path of right node
    if(t.right!=null){
        l.add(t.right.val);
        dfs(t.right, sum-t.right.val, result, l);
        l.remove(l.size()-1);
    }
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *