題目描述
給你一棵二叉樹,請你返回滿足以下條件的所有節點的值之和:
該節點的祖父節點的值爲偶數。(一個節點的祖父節點是指該節點的父節點的父節點。)
如果不存在祖父節點值爲偶數的節點,那麼返回 0 。
思路
當我們在遍歷至某個節點時,若我們可以知道此節點的祖父節點是誰,那麼此題就可迎刃而解。
怎麼知道呢?在往下遞歸時把父節點(的值)p,與祖父節點(的值)gp 傳入即可。
傳兩個值的原因是,p 是爲了作爲下層的 gp傳入, gp是用於判斷當前層的祖父節點。
以上面的例子圖來說,我們先假設根節點有父節點1與祖父節點1(爲了不把根節點統計進去所以假設了兩個奇數),那麼遍歷至根節點的左孩子7時,傳入父(6)與祖父(1),接着遍歷至7的左孩子2時,傳入父(7)與祖父(6),此時就能感知到2的祖父爲6了。
代碼
class Solution {
public int sumEvenGrandparent(TreeNode root) {
return helper(root, 1, 1);
}
public int helper(TreeNode node, int p, int gp) {
if (node == null) return 0;
return helper(node.left, node.val, p) + helper(node.right, node.val, p) + (gp % 2 == 0 ? node.val : 0);
}
}
Runtime: 1 ms, faster than 98.77% of Java online submissions for Sum of Nodes with Even-Valued Grandparent.
Memory Usage: 41.7 MB, less than 43.77% of Java online submissions for Sum of Nodes with Even-Valued Grandparent.