题目:
给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。
算法:
方法一:dfs
func findTilt(root *TreeNode) int {
ans := 0
var dfs func(node *TreeNode) int
dfs = func(node *TreeNode) int {
if node == nil {
return 0
}
leftSum := dfs(node.Left)
rightSum := dfs(node.Right)
ans = ans + abs(leftSum, rightSum)
return node.Val + leftSum + rightSum
}
dfs(root)
return ans
}
func abs(a, b int) int {
if a > b {
return a - b
}
return b - a
}