99클럽 코테 스터디 13일차 TIL: BFS

이주희·2024년 6월 1일
0

99클럽 코테 스터디

목록 보기
10/20
post-thumbnail

너비우선탐색(BFS)을 활용한 알고리즘 문제풀이

오늘 푼 문제: Deepest Leaves Sum

입출력

  • 입력: 정수의 val을 가지는 이진트리가 주어집니다.
  • 출력: 가장 깊은 레벨의 리프 노드들의 합을 구합니다.

예제 코드

import java.util.*;

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
	/**
     * 1. 각 레벨 별 합을 구합니다.
     * 2. 해당 노드가 터미널 노드일 경우 자식 노드를 큐에 추가해줍니다.
     * 3. 해당 레벨이 마지막 레벨인지에 대해서는 루프가 다 돈 후 queue에 다음 레벨의 노드가 있는지 확인합니다.
     * 4. 만약 다음 레벨이 없을 경우 해당 레벨의 합을 답으로 반환합니다.
     */
    public int deepestLeavesSum(TreeNode root) {
        int answer = -1;
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        while(!q.isEmpty()) {
            int size = q.size();
            int tmp = 0;
            for (int i = 0; i < size; i++) {
                TreeNode cq = q.poll();
                if (cq.left != null) q.offer(cq.left);
                if (cq.right != null) q.offer(cq.right);
                tmp += cq.val;
            }
            if (q.isEmpty()) answer = tmp;
        }
        return answer;
    }
}
  • LinkedList를 활용하여 각 레벨별 노드를 저장하였습니다.
  • BFS 알고리즘을 활용하여 각 레벨별 합 및 다음 레벨 존재여부를 확인하였습니다.

회고

  • 꾸준히 해나가야하는데, 일정을 잘 조율하여 진행해야겠다는 생각이 듭니다.
profile
공릉동 감자

0개의 댓글