본문 바로가기

Algorithm/DFS

(C++) - LeetCode (easy) 404. Sum of Left Leaves

반응형

https://leetcode.com/problems/sum-of-left-leaves/description/

 

Sum of Left Leaves - LeetCode

Can you solve this real interview question? Sum of Left Leaves - Given the root of a binary tree, return the sum of all left leaves. A leaf is a node with no children. A left leaf is a leaf that is the left child of another node.   Example 1: [https://ass

leetcode.com

재귀를 이용한 자료구조 문제였습니다.

📕 풀이방법

📔 풀이과정

현재 node가 왼쪽임을 나타내기 위해 상태를 의미하는 줄임말 stat변수를 인자로 추가하기 위해 새로운 함수 getSum을 구현했습니다.

1. 왼쪽은 0, 오른쪽은 1로 양쪽 tree에 대해 가는 방향을 정해 함수를 호출해줍니다.

2. 자식이 없으면 현재 node는 leaf이므로 왼쪽방향이면서 자식이 없으면 node의 값을 더해줍니다.

3. 왼쪽 leaf들을 더해준 값들을 sum에 누적해 더해주며 return해줍니다.

📔 정답 출력 | 반환

/**
 * 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) {}
 * };
 */
#define LEFT 0
#define RIGHT 1
class Solution {
public:
    int getSum(TreeNode*root, int stat) {
        if(root == NULL) return 0;
        int sum = 0;
        sum += getSum(root->left, LEFT) + getSum(root->right, RIGHT);
        if(root->left == NULL && root->right == NULL && stat == LEFT) sum += root->val;
        return sum;
    }
    int sumOfLeftLeaves(TreeNode* root) {
        return getSum(root, RIGHT);
    }
};

📕 Code

📔 C++

/**
 * 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) {}
 * };
 */
#define LEFT 0
#define RIGHT 1
class Solution {
public:
    int getSum(TreeNode*root, int stat) {
        if(root == NULL) return 0;
        int sum = 0;
        sum += getSum(root->left, LEFT) + getSum(root->right, RIGHT);
        if(root->left == NULL && root->right == NULL && stat == LEFT) sum += root->val;
        return sum;
    }
    int sumOfLeftLeaves(TreeNode* root) {
        return getSum(root, RIGHT);
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.