[leetcode] 979. Distribuir monedas en árbol binario

Descripción

Dada la raíz de un árbol binario con N nodos, cada nodo en el árbol tiene monedas node.val, y hay N monedas en total.

En un movimiento, podemos elegir dos nodos adyacentes y mover una moneda de un nodo a otro. (El cambio puede ser de padre a hijo o de hijo a padre).

Devuelve el número de movimientos necesarios para que cada nodo tenga exactamente una moneda.

Ejemplo 1:

Input: [3,0,0]
Output: 2
Explanation: From the root of the tree, we move one coin to its left child, and one coin to its right child.

Ejemplo 2:

Input: [0,3,0]
Output: 3
Explanation: From the left child of the root, we move two coins to the root [taking two moves].  Then, we move one coin from the root of the tree to the right child.

Ejemplo 3:

Input: [1,0,2]
Output: 2

Ejemplo 4:

Input: [1,0,0,null,3]
Output: 4

Nota:

  1. 1 <= N <= 100
  2. 0 <= nodo.val <= N

análisis

El significado de la pregunta es: Dado un árbol binario, el valor del nodo representa el número de monedas, y ahora necesitamos distribuir uniformemente las monedas en cada nodo y encontrar el número de movimientos de monedas. No hice esta pregunta, me referí a las ideas de otras personas.

abs(dfs(node.left)) + abs(dfs(node.right))

Indica el número de pasos de la moneda a mover

node.val + dfs(node.left) + dfs(node.right) - 1 

Indica la cantidad de monedas extra para el nodo actual.
Si puedes pensar en esto, será fácil de manejar y saldrá la recursividad, pero es posible que la idea no se pueda pensar jajaja, especialmente la fórmula del rompecabezas anterior necesita encontrar una regla

Código

# 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 solve(self,root):
        if(root is None):
            return 0
        l=self.solve(root.left)
        r=self.solve(root.right)
        self.res+=abs(l)+abs(r)
        return root.val+l+r-1
    def distributeCoins(self, root: TreeNode) -> int:
        self.res=0
        self.solve(root)
        return self.res

referencias

[LeetCode] solución

Supongo que te gusta

Origin blog.csdn.net/w5688414/article/details/109263001
Recomendado
Clasificación