LeetCode——祖父節點值爲偶數的節點和 Java

@author: sdubrz
@date: 2020.04.15
題目難度: 中等
考察內容: 樹
原題鏈接 https://leetcode-cn.com/problems/sum-of-nodes-with-even-valued-grandparent/
題目的著作權歸領釦網絡所有,商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題代碼轉載請聯繫 lwyz521604#163.com

給你一棵二叉樹,請你返回滿足以下條件的所有節點的值之和:

  • 該節點的祖父節點的值爲偶數。(一個節點的祖父節點是指該節點的父節點的父節點。)

如果不存在祖父節點值爲偶數的節點,那麼返回 0 。

示例:

在這裏插入圖片描述

輸入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
輸出:18
解釋:圖中紅色節點的祖父節點的值爲偶數,藍色節點爲這些紅色節點的祖父節點。

提示:

  • 樹中節點的數目在 1 到 10^4 之間。
  • 每個節點的值在 1 到 100 之間。

通過次數3,320提交次數4,138

解法

最簡單的方式用一個遞歸地方式即可:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int sumEvenGrandparent(TreeNode root) {
        if(root==null){
            return 0;
        }

        int sum = 0;
        if(root.val%2==0){
            sum += this.sumEvenParent(root.left);
            sum += this.sumEvenParent(root.right);
        }

        sum += this.sumEvenGrandparent(root.left);
        sum += this.sumEvenGrandparent(root.right);

        return sum;
    }

    // 返回node的兩個孩子的數值之和
    private int sumEvenParent(TreeNode node){
        if(node==null){
            return 0;
        }

        int sum = 0;
        if(node.left!=null){
            sum += node.left.val;
        }
        if(node.right!=null){
            sum += node.right.val;
        }

        return sum;
    }
}

下面是在 LeetCode 系統中的提交結果。因爲 sumEvenParent 函數導致了部分重複的遍歷,所以時間上並不是最有效的方法。如果要加速可以 sumEvenParent 的功能合併到 sumEvenGrandparent 中去,不過可能會造成空間複雜度的稍微提升。

執行結果: 通過 顯示詳情
執行用時 : 2 ms, 在所有 Java 提交中擊敗了 68.56% 的用戶
內存消耗 : 41.5 MB, 在所有 Java 提交中擊敗了 100.00% 的用戶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章