563.二叉树的坡度

86 阅读1分钟

题目:
给你一个二叉树的根节点 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
}