//

给你一棵二叉树的根节点 root ,找出并返回满足要求的节点数,要求节点的值等于其 子树 中值的 平均值

// //

注意:

// // // //

 

// //

示例 1:

// //
输入:root = [4,8,5,0,1,null,6]
//输出:5
//解释:
//对值为 4 的节点:子树的平均值 (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4 。
//对值为 5 的节点:子树的平均值 (5 + 6) / 2 = 11 / 2 = 5 。
//对值为 0 的节点:子树的平均值 0 / 1 = 0 。
//对值为 1 的节点:子树的平均值 1 / 1 = 1 。
//对值为 6 的节点:子树的平均值 6 / 1 = 6 。
//
// //

示例 2:

// //
输入:root = [1]
//输出:1
//解释:对值为 1 的节点:子树的平均值 1 / 1 = 1。
//
// //

 

// //

提示:

// // //
  • 👍 8
  • 👎 0
  • package leetcode.editor.cn; import com.code.leet.entiy.TreeNode; import java.util.LinkedList; import java.util.Queue; // 2265:统计值等于子树平均值的节点数 public class CountNodesEqualToAverageOfSubtree { public static void main(String[] args) { Solution solution = new CountNodesEqualToAverageOfSubtree().new Solution(); // TO TEST } //leetcode submit region begin(Prohibit modification and deletion) /** * 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 { public int averageOfSubtree(TreeNode root) { counts(root); sums(root); return count; } Queue queue = new LinkedList<>(); int count = 0; private int counts(TreeNode root) { if (root == null) { return 0; } int cnt = counts(root.left) + counts(root.right) + 1; queue.add(cnt); return cnt; } private int sums(TreeNode root) { if (root == null) { return 0; } int sum = root.val; sum += sums(root.left); sum += sums(root.right); if (sum / queue.poll() == root.val) { count++; } return sum; } } //leetcode submit region end(Prohibit modification and deletion) }