leetcode 124. Suma de ruta máxima de árbol binario (python)

Llega oferta, cava amigos a recoger! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento

describir

Una ruta en un árbol binario es una secuencia de nodos donde cada par de nodos adyacentes en la secuencia tiene un borde que los conecta. Un nodo solo puede aparecer en la secuencia como máximo una vez. Tenga en cuenta que la ruta no necesita pasar por la raíz. La suma de la ruta de una ruta es la suma de los valores del nodo en la ruta. Dada la raíz de un árbol binario, devuelva la suma máxima de la ruta de cualquier ruta que no esté vacía.

Ejemplo 1:

Input: root = [1,2,3]
Output: 6
Explanation: The optimal path is 2 -> 1 -> 3 with a path sum of 2 + 1 + 3 = 6.
复制代码

Nota:

The number of nodes in the tree is in the range [1, 3 * 10^4].
-1000 <= Node.val <= 1000
复制代码

Analizar gramaticalmente

De acuerdo con el significado de la pregunta, un camino en un árbol binario es una secuencia de nodos, y un nodo solo puede aparecer en la secuencia como máximo una vez. Cabe señalar que la ruta aquí puede tener cualquier longitud y no todas las rutas deben pasar por el nodo raíz. La suma de un camino es la suma de los valores de los nodos en el camino. Dada la raíz de un árbol binario, devuelva la suma máxima de rutas de cualquier ruta que no esté vacía.

De hecho, el patrón de una suma de ruta debe tomar un nodo raíz como punto de inflexión y luego encontrar dos rutas a la izquierda y a la derecha, la suma de la ruta izquierda es lo más grande posible y la suma de la ruta derecha es lo más grande posible. , para garantizar que se encuentre una ruta no vacía Ruta máxima suma de rutas. Defina una función recursiva DFS, que no use la función recursiva DFS para resolver directamente, sino que devuelva la suma de la ruta máxima que toma el nodo actual como el nodo raíz sin bajar hasta el final, porque esta función recursiva atravesará todos los nodos, por lo que Al atravesar todos los nodos, el resultado de la variable global se puede actualizar mientras se calcula recursivamente la suma garantizada de los caminos izquierdo y derecho lo más grande posible. Calcule la suma máxima de rutas de rutas no vacías. La función recursiva no es el punto, el punto es actualizar el resultado durante la recursión transversal.

responder

class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution(object):
    def __init__(self):
        self.result = -float('inf')
        
    def maxPathSum(self, root):
        self.dfs(root)
        return self.result
    
    def dfs(self, root):
        if not root: 
            return 0
        L = self.dfs(root.left)
        R = self.dfs(root.right)
        
        PathSum = root.val
        if L>=0: PathSum += L
        if R>=0: PathSum += R
        self.result = max(self.result, PathSum)
        
        if L<=0 and R<=0:
            return root.val
        else:
            return root.val + max(L, R)	
复制代码

resultado de la operación

Runtime: 84 ms, faster than 51.00% of Python online submissions for Binary Tree Maximum Path Sum.
Memory Usage: 25.5 MB, less than 93.75% of Python online submissions for Binary Tree Maximum Path Sum.
复制代码

Enlace del título original: leetcode.com/problems/bi…

Supongo que te gusta

Origin juejin.im/post/7078459435391123492
Recomendado
Clasificación