/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findTilt(root *TreeNode) int {
	tilt := 0
	postorder(root, &tilt)
	return tilt
}

func postorder(root *TreeNode, tilt *int) int {
	if root == nil {
		return 0
	}
	l := postorder(root.Left, tilt)
	r := postorder(root.Right, tilt)
	sum := l + r + root.Val
	*tilt += abs(l - r)
	return sum
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}