【LeetCode】563. 二叉树的坡度(递归实现)

给定一个二叉树,计算整个树的坡度。

一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。

整个树的坡度就是其所有节点的坡度之和。

示例:

输入:
1
/ \
2 3

输出: 1
解释:
结点的坡度 2 : 0
结点的坡度 3 : 0
结点的坡度 1 : |2-3| = 1
树的坡度 : 0 + 0 + 1 = 1

注意:

  • 任何子树的结点的和不会超过32位整数的范围。
  • 坡度的值不会超过32位整数的范围。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    int ans = 0;
    public int findTilt(TreeNode root) {
    
    
        if(root!=null){
    
    
            sumTilt(root);
        }
        return ans;
    }
    
    public int sumTilt(TreeNode root){
    
    
        if(root!=null){
    
    
            int leftValue = sumTilt(root.left);     //递归左子树
            int rightValue = sumTilt(root.right);   //递归右子树
            ans += Math.abs(leftValue - rightValue);    //计算并添加 当前结点梯度
            return root.val + leftValue + rightValue;   //向父母结点返回 左/右 结点之和
        }
        return 0;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40849588/article/details/89409092