[LeetCode] 102. Binary Tree Level Order Traversal

2021. 7. 6. 14:33·알고리즘 문제풀이/LeetCode
728x90

문제

트리 문제이다.

binary tree의 root 노드가 주어질 때, level(층)을 순서대로 각 노드의 value들을 2차원 배열로 저장하여 리턴하는 문제이다.

https://leetcode.com/problems/binary-tree-level-order-traversal/

 

Binary Tree Level Order Traversal - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

풀이

각 층에 있는 노드의 value들을 확인하는 문제이다. 확인하는 순서는 오른쪽->왼쪽 순서이다.

Queue를 활용하여 너비우선탐색을 한다.

위 그림을 보면, 각 층에는 노드들이 있다.

 

먼저, 큐에 root 노드를 삽입한다.

큐의 크기를 size라고 할 때, size 만큼 다음을 반복한다.

- 큐에서 노드를 하나 꺼내어, 그 노드의 값을 리스트에 저장한다.

- 꺼낸 노드의 left/right 노드가 null이 아니면, 그 노드를 큐에 삽입한다.

 

이것을 반복하면, while문을 한 번 끝날 때마다, 각 층의 노드를 모두 확인한 것이 되고

큐에 있는 노드는 다음 층의 노드만 남아있게 된다.

 

(위 그림 예시)

루트노드를 하나 큐에 삽입한다.

1층) size=1이므로 큐에서 노드 1개를 꺼내 확인하고, 각 child들을 담는다. (child 2개)

2층) size=2이므로 큐에서 노드 2개를 꺼내 확인하고, 각 child들을 담는다. (child 2개)

3층) size=2이므로 큐에서 노드 2개를 꺼내 확인하고, 각 child들을 담는다. (child 0개)

-> 다음 층이 없기 때문에 (child가 없기 때문에!)  지금까지 저장한 value들을 담아 리턴한다.

코드

public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> answer = new ArrayList<>();
        if (root == null)
            return answer;

        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);

        while (!q.isEmpty()) { // 노드를 모두 확인
            int size = q.size(); // 현재 큐에 들어있는 노드 수 (한 층의 노드 수)
            ArrayList<Integer> values = new ArrayList<>();
            while (size > 0) {
                TreeNode node = q.poll();
                values.add(node.val);
                if (node.left != null) // child node (left)
                    q.add(node.left);
                if (node.right != null) // child noe (right)
                    q.add(node.right);
                size--;
            }
            answer.add(values);
        }

        return answer;
    }

 

728x90

'알고리즘 문제풀이 > LeetCode' 카테고리의 다른 글

[LeetCode] 152. Maximum Product Subarray  (0) 2021.07.07
[LeetCode] 53. Maximum Subarray  (0) 2021.07.07
[LeetCode] 226. Invert Binary Tree  (0) 2021.07.05
[LeetCode] 100. Same Tree  (0) 2021.07.05
[LeetCode] 104. Maximum Depth of Binary Tree  (0) 2021.07.04
'알고리즘 문제풀이/LeetCode' 카테고리의 다른 글
  • [LeetCode] 152. Maximum Product Subarray
  • [LeetCode] 53. Maximum Subarray
  • [LeetCode] 226. Invert Binary Tree
  • [LeetCode] 100. Same Tree
kiminae
kiminae
공부한 내용을 정리합니다.
  • kiminae
    데이터 다루는 사람
    kiminae
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • AI & 빅데이터 (6)
        • kafka (10)
        • [Book] 빅데이터를 지탱하는 기술 (12)
      • 알고리즘 (19)
      • 알고리즘 문제풀이 (13)
        • programmers (0)
        • 백준 (1)
        • LeetCode (12)
      • Android (3)
      • Book&Lesson (13)
        • [Lesson] 프로그래머스 커뮤러닝 (Pyth.. (1)
      • 참고한 글들 (1)
      • 컨퍼런스 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시간복잡도
    빅데이터를지탱하는기술
    Algorithm
    정렬알고리즘
    카프카
    추천알고리즘
    DP문제
    데이터시각화
    정렬
    MPP데이터베이스
    sort
    hadoop
    개인화추천
    mvvm
    트리
    알고리즘
    파이프라인구축
    알고리즘문제
    알고리즘풀이
    머신러닝
    리트코드
    Kafka
    leetcode
    버블정렬
    카프카클라이언트
    BI도구
    빅데이터
    릿코드
    데이터엔지니어
    ViewModel
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kiminae
[LeetCode] 102. Binary Tree Level Order Traversal
상단으로

티스토리툴바