1315. Sum of Nodes with Even-Valued Grandparent

Medium
Given the root of a binary tree, return the sum of values of nodes with an even-valued grandparent. If there are no nodes with an even-valued grandparent, return 0.
A grandparent of a node is the parent of its parent if it exists.
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.
Example 2:
​
​
Input: root = [1]
Output: 0
Constraints:
  • The number of nodes in the tree is in the range [1, 10^4].
  • 1 <= Node.val <= 100

解題

透過將 parent、grandparent 節點傳下去的方式判斷是否需要加到 ans
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func sumEvenGrandparent(root *TreeNode) int {
ans := 0
​
var helper func(*TreeNode, *TreeNode, *TreeNode)
helper = func(node *TreeNode, parent *TreeNode, grandParent *TreeNode) {
if node == nil {
return
}
​
if grandParent != nil && grandParent.Val % 2 == 0 {
ans += node.Val
}
​
helper(node.Left, node, parent)
helper(node.Right, node, parent)
}
​
helper(root, nil, nil)
​
return ans
}
​