[LeetCode] 1315. Sum of Nodes with Even-Valued Grandparent

Given a binary tree, return the sum of values of nodes with even-valued grandparent.  (A grandparent of a node is the parent of its parent, if it exists.)

If there are no nodes with an even-valued grandparent, return 0.

Example 1:

Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
Output: 18
Explanation: The red nodes are the nodes with even-value grandparent while the blue nodes are the even-value grandparents.

Constraints:

  • The number of nodes in the tree is between 1 and 10^4.
  • The value of nodes is between 1 and 100.

祖父节点值为偶数的节点和。

给你一棵二叉树,请你返回满足以下条件的所有节点的值之和:

该节点的祖父节点的值为偶数。(一个节点的祖父节点是指该节点的父节点的父节点。)
如果不存在祖父节点值为偶数的节点,那么返回 0 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这道题看似挺复杂,其实我个人感觉考察的还是对于 DFS 和递归的理解。我这里给出一个 DFS/前序遍历 的思路。题目既然问的是如果 grandParent 节点值是偶数,才把当前节点的节点值累加到结果中,那么我们在用DFS做深度遍历的时候就一定要带上 parent 节点和 grandParent 节点的某些信息。这里只要带上了这两个节点的信息,才能在遍历到当前节点的时候决定要不要加入结果集。

时间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 sumEvenGrandparent(TreeNode root) {
20         dfs(root, null, null);
21         return res;
22     }
23 
24     private void dfs(TreeNode root, TreeNode parent, TreeNode grandParent) {
25         // base case
26         if (root == null) {
27             return;
28         }
29         if (grandParent != null && grandParent.val % 2 == 0) {
30             res += root.val;
31         }
32         dfs(root.left, root, parent);
33         dfs(root.right, root, parent);
34     }
35 }

 

LeetCode 题目总结

posted @ 2021-06-03 12:54  CNoodle  阅读(123)  评论(0编辑  收藏  举报