티스토리 뷰

문제

이진트리의 root노드를 줄 것입니다. 해당 이진트리의 레벨 순회 결과를 출력하세요.

입력

인자 1 : TreeNode

  • TreeNode 타입으로 된 root 노드

출력

  • number[][] 을 리턴해야 합니다.

주의 사항

  • 이진트리 내의 노드 갯수의 범위는 0 - 2000 입니다.

입출력 예시

class TreeNode {
	constructor(val, left, right) {
		this.val = val === undefined ? 0 : val;
		this.left = left === undefined ? null : left;
		this.right = right === undefined ? null : right;
	}
}


/*
        3
       / \
      9  20
        /  \
       15   7
*/
const root1 = new TreeNode(3, new TreeNode(9), new TreeNode(20, new TreeNode(15), new TreeNode(7)));
const result1 = levelOrderTraversal(root1);
console.log(result1); // [[3], [9, 20], [15, 7]];

const root2 = new TreeNode(1);
const result2 = levelOrderTraversal(root2);
console.log(result2); // [[1]]

const root3 = null;
const result3 = levelOrderTraversal(root3);
console.log(result3); // []

 

 

 

풀이


const levelOrderTraversal = (root) => {
  if (root === null) return []; // 빈 트리인 경우, 빈 배열 반환

  const result = []; // 순회 결과를 저장하기 위한 배열
  const queue = [root]; // 노드를 저장하기 위한 큐

  while (queue.length > 0) {
    const size = queue.length; // 현재 레벨의 노드 개수를 저장

    const group = []; // 현재 레벨의 노드 값을 저장하기 위한 배열

    for (let i = 0; i < size; i++) {
      const curr = queue.shift(); // 큐에서 노드를 꺼냄
      group.push(curr.val); // 현재 레벨의 노드 값을 배열에 추가

      if (curr.left) queue.push(curr.left); // 왼쪽 자식이 있으면 큐에 추가
      if (curr.right) queue.push(curr.right); // 오른쪽 자식이 있으면 큐에 추가
    }

    result.push(group); // 현재 레벨의 노드 값 배열을 결과 배열에 추가
  }

  return result; // 레벨 순서 순회 결과 반환
}
  • 주어진 이진 트리의 루트 노드를 큐에 추가한 뒤, 큐가 비어질 때까지 반복합니다.
  • 각 레벨별로 현재 큐에 있는 노드의 개수만큼 반복하면서 큐에서 노드를 꺼내고, 해당 노드의 값을 현재 레벨의 값 배열에 추가합니다.
  • 그리고 해당 노드의 자식들을 큐에 추가하여 다음 레벨을 탐색합니다.
  • 마지막으로 각 레벨의 값 배열을 결과 배열에 추가하고, 최종적으로 결과 배열을 반환합니다.

'문제풀이' 카테고리의 다른 글

[코플릿]insertionSort  (0) 2023.05.30
[코플릿]이진트리 후위순회(postorder)  (0) 2023.05.11
[코플릿]박스 포장  (0) 2023.05.10
[코플릿] 유효한 괄호쌍  (0) 2023.05.10
프로그래머스 LV.0 (Javascript) 옹알이 (1)  (0) 2023.04.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함