Distribute Coins in Binary Tree
Last updated
Was this helpful?
Last updated
Was this helpful?
Given theroot
of a binary tree withN
nodes, eachnode
in the tree hasnode.val
coins, and there areN
coins total.
In one move, we may choose two adjacent nodes and move one coin from one node to another. (The move may be from parent to child, or from child to parent.)
Return the number of moves required to make every node have exactly one coin.
Example 1:
Example 2:
Example 3:
Example 4:
Note:
分析
Recursive method is indeed to find needed coins in a bottom-up way.
If the node is null, it require no coins.
If the node does't have enough coins to feed its children and itself (require n), it need to ask n coins from its parent. So
count = count + n
If the node have extra coins to feed its children and itself (extra n), it need to pass n coins from its parent. So
count = count + n
直接改原函数和node val. If we can modify values of tree nodes, we can store the balance in nodes, and use the return value to accumulate the number of moves. This way we can get rid of the helper method. 原函数同时处理父节点 pre,子节点,和自己。父节点就是+=root.val-1。自己的值就是左右+self-1返回用。结果是左右+self的abs。这里root.val可以是负数,move是abs
DFS
好理解版本: