这个解决方案使用深度优先搜索(DFS)来遍历整棵树,并在遍历过程中寻找符合条件的节点。首先检查当前节点值是否为偶数,如果是,那么它的孙子节点(如果存在)的值将被加到结果中。之后,递归地对左右子树应用同样的逻辑。这种方法确保了每个节点都被访问一次,且只有当节点的祖父节点的值为偶数时,节点的值才会被加入总和。
时间复杂度: O(n)
空间复杂度: O(n) in the worst case, O(log(n)) in the best case
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumEvenGrandparent(self, root: TreeNode) -> int:
re = 0
# Base case: if the node is a leaf, return 0
if not root.left and not root.right:
return 0
# Check if the current node's value is even
if root.val % 2 == 0:
# Check left child's children
if root.left:
if root.left.left:
re += root.left.left.val
if root.left.right:
re += root.left.right.val
# Check right child's children
if root.right:
if root.right.left:
re += root.right.left.val
if root.right.right:
re += root.right.right.val
# Recursively sum up values for left subtree
if root.left:
re += self.sumEvenGrandparent(root.left)
# Recursively sum up values for right subtree
if root.right:
re += self.sumEvenGrandparent(root.right)
return re