深度优先遍历,时间复杂度 O(n) 空间复杂度 O(n)
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func findTilt(root *TreeNode) (ans int) {
var dfs func(*TreeNode) int
dfs = func(node *TreeNode) int {
if node == nil {
return 0
}
sumLeft := dfs(node.Left)
sumRight := dfs(node.Right)
ans += abs(sumLeft - sumRight)
return sumLeft + sumRight + node.Val
}
dfs(root)
return
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}