563 二叉树的坡度-中等
题目:
给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。
分析:深度优先搜索
递归的思路,求每个节点的左右子树和,并在求和过程中更新坡度值。
// date 2023/10/25
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func findTilt(root *TreeNode) int {
var ans int
var sum func(root *TreeNode) int
sum = func(root *TreeNode) int {
if root == nil {
return 0
}
ls, rs := sum(root.Left), sum(root.Right)
ans += abs(ls, rs)
return ls + rs + root.Val
}
sum(root)
return ans
}
func abs(x, y int) int {
if x > y {
return x-y
}
return y-x
}
最后更新于