Solución del problema de registro: Lituo 1448. Contar el número de nodos buenos en un árbol binario

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_45314061/article/details/130473453
Recomendado
Clasificación