Leetcode--Java--563. 二叉树的坡度

题目描述

给定一个二叉树,计算 整个树 的坡度 。
一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树 的坡度就是其所有节点的坡度之和。

样例描述

在这里插入图片描述

思路

二叉树递归

  1. 单独写计算坡度的函数,在 递归中加入到全局变量res即可。
  2. 在计算树的权值和的过程中求坡度

代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    
    
    int ans = 0;
    public int findTilt(TreeNode root) {
    
    
       dfs(root);
       return ans;
    }
    public int dfs(TreeNode root) {
    
    
        if (root == null) return 0;
        int l = dfs(root.left), r = dfs(root.right);
        ans += Math.abs(l - r);
        return l + r + root.val; 
    }
}

Guess you like

Origin blog.csdn.net/Sherlock_Obama/article/details/121395225