给定一个二叉树,计算整个树的坡度。
一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。
整个树的坡度就是其所有节点的坡度之和。
示例:
输入:
1
/ \
2 3
输出: 1
解释:
结点的坡度 2 : 0
结点的坡度 3 : 0
结点的坡度 1 : |2-3| = 1
树的坡度 : 0 + 0 + 1 = 1
注意:
任何子树的结点的和不会超过32位整数的范围。
坡度的值不会超过32位整数的范围。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-tilt
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
按照题意,计算每个节点的左右子树节点值之和,然后取绝对值相加。
python实现:
class Solution:
def findTilt(self, root: TreeNode) -> int:
self.res = 0
def getSum(root: TreeNode):
if root is None:
return 0
l = getSum(root.left)
r = getSum(root.right)
self.res += abs(l-r)
return root.val+l+r
getSum(root)
return self.res
golang实现:
func findTilt(root *TreeNode) int {
if root == nil {
return 0
}
res := 0
getSum(root,&res)
return res
}
func getSum(root *TreeNode,res *int) int {
if root == nil {
return 0
}
l := getSum(root.Left,res)
r := getSum(root.Right,res)
t := l-r
if t < 0 {
t *= -1
}
*res += t
return l+r+root.Val
}