DEV Community

Cover image for 979. Distribute Coins in Binary Tree
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on • Edited on

979. Distribute Coins in Binary Tree

979. Distribute Coins in Binary Tree

Medium

You are given the root of a binary tree with n nodes where each node in the tree has node.val coins. There are n coins in total throughout the whole tree.

In one move, we may choose two adjacent nodes and move one coin from one node to another. A move may be from parent to child, or from child to parent.

Return the minimum number of moves required to make every node have exactly one coin.

Example 1:

tree1

  • Input: root = [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.

Example 2:

tree2

  • Input: oot = [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.

Constraints:

  • The number of nodes in the tree is n.
  • 1 <= n <= 100
  • 0 <= Node.val <= n
  • The sum of all Node.val is n.

Solution:

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     public $val = null;
 *     public $left = null;
 *     public $right = null;
 *     function __construct($val = 0, $left = null, $right = null) {
 *         $this->val = $val;
 *         $this->left = $left;
 *         $this->right = $right;
 *     }
 * }
 */
class Solution {

    /**
     * @param TreeNode $root
     * @return Integer
     */
    function distributeCoins($root) {
        $totalMoves = 0;
        $dfs = function($node) use (&$dfs, &$totalMoves) {
            if (!$node) {
                return 0;
            }
            $leftMoves = $dfs($node->left);
            $rightMoves = $dfs($node->right);
            $totalMoves += abs($leftMoves) + abs($rightMoves);            
            return $leftMoves + $rightMoves + $node->val - 1;
        };
        $dfs($root);
        return $totalMoves;
    }
}
Enter fullscreen mode Exit fullscreen mode

Contact Links

If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!

Top comments (0)