- 문제 링크: https://leetcode.com/problems/sum-of-nodes-with-even-valued-grandparent/

 

주어진 트리에서 값이 짝수인(even-valued) 노드의 손주(grandchildren) 노드들의 값의 합을 구하는 문제입니다. 난이도는 medium이네요.

일단 트리이기 때문에 이 손주 노드들을 두번 체크하는 일은 없기 때문에 이 부분은 별로 생각을 안해도 됩니다.

그 다음에는 dfs 또는 bfs로 모든 노드를 방문해서 그 노드 값이 짝수인 경우 손주 노드들의 값을 더하면 됩니다.

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def sumEvenGrandparent(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        return self.dfs(root)
    
    def dfs(self, root):
        if not root:
            return 0
        
        ret = 0
        if root.val % 2 == 0:
            if root.left:
                if root.left.left:
                    ret += root.left.left.val
                if root.left.right:
                    ret += root.left.right.val
            if root.right:
                if root.right.left:
                    ret += root.right.left.val
                if root.right.right:
                    ret += root.right.right.val
        
        # l, r
        if root.left:
            ret += self.dfs(root.left)
        if root.right:
            ret += self.dfs(root.right)
        return ret

손주 노드들의 값은 어떻게 구하느냐.. 여러가지 방법이 있겠죠. 제일 쉬운건 위 방법입니다.

더 모던하게 하려면 저 부분을 함수로 빼거나, 아니면 모든 노드 방문하는건 똑같은데 dfs 함수 인자에 grandparent를 갖게 해서 현재 노드의 grandparent 노드의 값이 짝수면 합으로 더하고, 아님 말고 뭐 그런식으로 해도 됩니다

반응형