• [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 题目总结

  • 相关阅读:
    三范式
    SVN
    docker镜像文件的导入与导出(docker镜像迁移)
    OpenStack镜像服务基本操作
    keystone认证服务
    OpenStack存储(单节点)
    OpenStack单节点制作镜像
    清除OpenStack网络与路由
    制作OpenStack云平台centos6.5镜像
    OpenStack单节点网络设置
  • 原文地址:https://www.cnblogs.com/cnoodle/p/14844744.html
Copyright © 2020-2023  润新知