原文地址:http://www.javashuo.com/article/p-dbjvcpxe-md.html html
Given the root
of a binary tree with N
nodes, each node
in the tree has node.val
coins, and there are N
coins total.node
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.)ui
Return the number of moves required to make every node have exactly one coin. spa
Example 1:3d
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.
Example 2:code
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.
Example 3:htm
Input: [1,0,2]
Output: 2
Example 4:blog
Input: [1,0,0,null,3]
Output: 4
Note:get
1<= N <= 100
0 <= node.val <= N
给定一个有 N
个结点的二叉树的根结点 root
,树中的每一个结点上都对应有 node.val
枚硬币,而且总共有 N
枚硬币。input
在一次移动中,咱们能够选择两个相邻的结点,而后将一枚硬币从其中一个结点移动到另外一个结点。(移动能够是从父结点到子结点,或者从子结点移动到父结点。)。
返回使每一个结点上只有一枚硬币所需的移动次数。
示例 1:
输入:[3,0,0] 输出:2 解释:从树的根结点开始,咱们将一枚硬币移到它的左子结点上,一枚硬币移到它的右子结点上。
示例 2:
输入:[0,3,0] 输出:3 解释:从根结点的左子结点开始,咱们将两枚硬币移到根结点上 [移动两次]。而后,咱们把一枚硬币从根结点移到右子结点上。
示例 3:
输入:[1,0,2] 输出:2
示例 4:
输入:[1,0,0,null,3] 输出:4
提示:
1<= N <= 100
0 <= node.val <= N
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * public var val: Int 5 * public var left: TreeNode? 6 * public var right: TreeNode? 7 * public init(_ val: Int) { 8 * self.val = val 9 * self.left = nil 10 * self.right = nil 11 * } 12 * } 13 */ 14 class Solution { 15 var ans:Int = 0 16 func distributeCoins(_ root: TreeNode?) -> Int { 17 if root == nil 18 { 19 return 0 20 } 21 travel(root) 22 return ans 23 } 24 25 func travel(_ node: TreeNode?) -> [Int] 26 { 27 if node == nil 28 { 29 return [0, 0] 30 } 31 var left:[Int] = travel(node!.left) 32 var right:[Int] = travel(node!.right) 33 if left[0] != left[1] 34 { 35 ans += abs(left[0] - left[1]) 36 } 37 if right[0] != right[1] 38 { 39 ans += abs(right[0] - right[1]) 40 } 41 return [node!.val + left[0] + right[0], 1 + left[1] + right[1]] 42 } 43 }