es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ruta a cada hoja de un árbol binario

La función anterior AllPaths() agrega un array que contiene el camino a cada hoja del árbol binario al array global res.

El código funciona bien, pero quiero eliminar la variable global res y hacer que la función devuelva un array en su lugar. ¿Cómo puedo hacer eso?
“`
class Node:
def <strong>init</strong>(self, value, left=None, right=None) -> None:
self.value = value
self.left = left
self.right = right

def allPaths(node, arr=[]):
if node:
tmp = [*arr, node.value]
if not node.left and not node.right: # Hoja
return [tmp]
return allPaths(node.left, tmp) + allPaths(node.right, tmp)

root = Node(1)
root.left = Node(2);
root.left.left = Node(4);
root.left.right = Node(5);
root.right = Node(3);
root.right.right = Node(6);
"""
1 <– raíz
/ \
2 3<br>
/ \ \
4 5 6 <– hojas
"""
result = allPaths(root)
print(result)

<h1>Salida: [[1, 2, 4], [1, 2, 5], [1, 3, 6]]</h1>

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para eliminar la variable global res y hacer que la función devuelva en su lugar un arreglo, simplemente podemos modificar la función allPaths para que retorne el arreglo res al final.

    Para hacer esto, podemos inicializar una lista vacía dentro de la función y usar esta lista para almacenar los caminos en lugar de la lista global res. Luego, podemos retornar esta lista al final de la función.

    El código modificado se vería así:

    class Node:
        def __init__(self, value, left=None, right=None) -> None:
            self.value = value
            self.left  = left
            self.right = right
    
    def allPaths(node, arr=[], pathList=[]):
        if node:
            tmp = [*arr, node.value]
            if not node.left and not node.right: # Leaf
                pathList.append(tmp)
            allPaths(node.left, tmp, pathList)
            allPaths(node.right, tmp, pathList)
        return pathList
    
    root             = Node(1)
    root.left        = Node(2);
    root.left.left   = Node(4);
    root.left.right  = Node(5);
    root.right       = Node(3);
    root.right.right = Node(6);
    """
              1         <-- raíz
            /   \
           2     3  
         /   \    \
        4     5    6    <-- hojas
    """
    res = allPaths(root)
    print(res)
    # Output : [[1, 2, 4], [1, 2, 5], [1, 3, 6]]
    

    Con esta modificación, la función allPaths ahora devuelve una lista de todos los caminos hacia las hojas del árbol binario. La salida del programa sigue siendo la misma.

Comments are closed.