[LeetCode] 1973. Count Nodes Equal to Sum of Descendants

Given the root of a binary tree, return the number of nodes where the value of the node is equal to the sum of the values of its descendants.

A descendant of a node x is any node that is on the path from node x to some leaf node. The sum is considered to be 0 if the node has no descendants.

Example 1:

[LeetCode] 1973. Count Nodes Equal to Sum of Descendants

Input: root = [10,3,4,2,1]
Output: 2
Explanation:
For the node with value 10: The sum of its descendants is 3+4+2+1 = 10.
For the node with value 3: The sum of its descendants is 2+1 = 3.

Example 2:

[LeetCode] 1973. Count Nodes Equal to Sum of Descendants

Input: root = [2,3,null,2,null]
Output: 0
Explanation:
No node has a value that is equal to the sum of its descendants.

Example 3:

[LeetCode] 1973. Count Nodes Equal to Sum of Descendants

Input: root = [0]
Output: 1
For the node with value 0: The sum of its descendants is 0 since it has no descendants.

Constraints:

  • The number of nodes in the tree is in the range [1, 105].
  • 0 <= Node.val <= 105

找与子树节点值相等的节点。

题意是给一棵二叉树,请返回有多少个节点其节点值 = 由这个节点所有孩子节点值的和。

思路是后序遍历,类似1120题。因为要计算孩子节点的值,所以必然是后序遍历。对于当前节点来说,我们通过后序遍历计算了左孩子节点值 + 右孩子节点值,如果左孩子节点值 + 右孩子节点值 = 当前的节点值,那么我们就找到了一个符合题意的节点。对于当前节点,往其父节点返回的是以当前节点为父节点的子树的节点值的和。

时间O(n)

空间O(n)

Java实现

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode() {}
 8  *     TreeNode(int val) { this.val = val; }
 9  *     TreeNode(int val, TreeNode left, TreeNode right) {
10  *         this.val = val;
11  *         this.left = left;
12  *         this.right = right;
13  *     }
14  * }
15  */
16 class Solution {
17     int res = 0;
18     
19     public int equalToDescendants(TreeNode root) {
20         // corner case
21         if (root == null) {
22             return res;
23         }
24         helper(root);
25         return res;
26     }
27     
28     private int helper(TreeNode root) {
29         if (root == null) {
30             return 0;
31         }
32         int left = helper(root.left);
33         int right = helper(root.right);
34         int sum = left + right;
35         if (sum == root.val) {
36             res++;
37         }
38         return sum + root.val;
39     }
40 }

 

相关题目

1120. Maximum Average Subtree

1973. Count Nodes Equal to Sum of Descendants

LeetCode 题目总结

[LeetCode] 1973. Count Nodes Equal to Sum of Descendants

上一篇:随便玩玩之C#-4 输入


下一篇:SSM 框架学习(黑马程序员)