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:
- 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:
- 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
isn
.
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;
}
}
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!