ALGORITHM/DFS(Depth First Search

[leetcode] 1315. Sum of Nodes with Even-Valued Grandparent

EARTH_ROOPRETELCHAM 2021. 2. 22. 22:23
728x90
반응형

1315. Sum of Nodes with Even-Valued Grandparent

문제

https://leetcode.com/problems/sum-of-nodes-with-even-valued-grandparent/

이진 트리(Binary Tree)가 주어지면, grandparent가 짝수인 노드의 합을 구하는 문제이다.

풀이

이진 트리는 TreeNode structure로 구현되어 있다. 각 노드별로 left와 right를 가리키는 포인터를 가지고 있다. 따라서, root 노드부터 훑으면서, 각 노드가 짝수라면 해당 노드의 grandchild의 합을 구하면 된다.

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int answer = 0;
    int sumEvenGrandparent(TreeNode* root) {
        if(root == nullptr)
            return 0;
        if(root->val % 2 == 0) {
            if(root->left != nullptr) {
                if(root->left->left != nullptr)
                    answer += root->left->left->val;
                if(root->left->right != nullptr)
                    answer += root->left->right->val;
            }
            if(root->right != nullptr) {
                if(root->right->left != nullptr)
                    answer += root->right->left->val;
                if(root->right->right != nullptr)
                    answer += root->right->right->val;
            }
        }
        sumEvenGrandparent(root->left);
        sumEvenGrandparent(root->right);
        
        return answer;
    }
};
  • 현재 노드가 비어있는지 확인합니다.
    • 노드가 비어있다면 해당 함수는 반환됩니다.
  • 현재 노드의 값이 짝수인지 확인합니다.
    • 짝수라면 해당 노드의 grandchild 유무를 확인한 후, grandchild를 answer에 더합니다.
  • 현재 노드에 대한 작업이 완료되면, 현 노드의 왼쪽, 오른쪽 child로 넘어가서 위 작업을 반복합니다.

 

728x90
반응형