Path Sum
Dado un árbol y un valor encontrar si existe una ruta de la raíz a una hoja (la hoja siendo un nodo sin hijos) que sume al valor dado.
Esta fue mi primera solución:
class Solution:
def recur(self, node,state):
if node is None:
return
state += node.val
if node.left is None and node.right is None:
if state == self.obj:
self.res = True
self.recur(node.left,state)
self.recur(node.right,state)
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
self.obj = targetSum
self.res = False
self.recur(root,0)
return self.res
Es una simple búsqueda en profundidad (DFS), que guarda el resultado y activa una variable cuando lo encuentra, pero noté que cuando es verdadero se pueden detener todas las demás búsquedas ya que ya encontró el valor, así quedó la segunda iteración:
class Solution:
def recur(self, node,state):
if self.res:
return
if node is None:
return
state += node.val
if node.left is None and node.right is None:
if state == self.obj:
self.res = True
return
self.recur(node.left,state)
self.recur(node.right,state)
def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
self.obj = targetSum
self.res = False
self.recur(root,0)
return self.res
Solamente verifica si ya se encontró el valor y termina la búsqueda, ambos resultados tuvieron un tiempo de 0ms, la mejora se notó en la memoria, uso ~0.2 menos MB