Dado un root
árbol binario con raíz, devuelva la cantidad de nodos buenos en el árbol binario.
Un "buen nodo" X se define como: entre los nodos que pasan de la raíz al nodo X, no hay ningún nodo cuyo valor sea mayor que el valor de X.
Ejemplo 1:
Entrada: root = [3,1,4,3,null,1,5] Salida: 4 Explicación: Los nodos azules en la figura son buenos nodos. El nodo raíz (3) siempre es un buen nodo. Nodo 4 -> (3,4) es el valor máximo en la ruta. Nodo 5 -> (3,4,5) es el valor máximo en la ruta. Nodo 3 -> (3,1,3) es el valor máximo en la ruta.
Ejemplo 2:
Entrada: root = [3,3,null,4,2] Salida: 3 Explicación: El nodo 2 -> (3, 3, 2) no es un buen nodo porque "3" es más grande que él.
Ejemplo 3:
Entrada: raíz = [1] Salida: 1 Explicación: El nodo raíz es un buen nodo.
Idea: dfs, seleccione el valor máximo y cuente
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def goodNodes(self, root: TreeNode) -> int:
self.ans = 0
def dfs(node,maxval):
if node:
if node.val >= maxval:
self.ans += 1
maxval = node.val
if node.left:
dfs(node.left,maxval)
if node.right:
dfs(node.right,maxval)
# dfs(node.left,maxval)
# dfs(node.right,maxval)
return self.ans
return dfs(root, -float('inf'))
Problemas encontrados:
código de error:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def goodNodes(self, root: TreeNode) -> int:
ans = 0
def dfs(node,maxval):
if node:
if node.val >= maxval:
ans += 1
maxval = node.val
if node.left:
dfs(node.left,maxval)
if node.right:
dfs(node.right,maxval)
# dfs(node.left,maxval)
# dfs(node.right,maxval)
return ans
return dfs(root, -float('inf'))
UnboundLocalError: local variable 'ans' referenced before assignment
ans += 1
Line 34 in dfs (Solution.py)
return dfs(root, -float('inf'))
Line 44 in goodNodes (Solution.py)
ret = Solution().goodNodes(param_1)
Line 63 in _driver (Solution.py)
_driver()
Line 74 in <module> (Solution.py)
Se encontraron las siguientes soluciones después de la búsqueda:
El problema es que ans no ha sido referenciado. El
parámetro real ans fuera de la función debe pasarse a la función. Self.ans debe agregarse al parámetro real, y self.ans también debe agregarse al parámetro formal.