자식 노드의 개수가 2개 이상일 수도 있는 트리의 BFS 순회 알고리즘

입력: 시작 노드

출력: 순회 결과를 담은 배열(요소의 타입은 숫자)

제공된 코드

// 이 아래 코드는 변경하지 않아도 됩니다. 자유롭게 참고하세요.
let Node = function (value) { //Node는 객체 찍어내는 클래스
	//constructor
  this.value = value;
  this.children = [];
};

// 위 Node 객체로 구성되는 트리는 매우 단순한 형태의 트리입니다.
// membership check(중복 확인)를 따로 하지 않습니다.
//메서드 추가
Node.prototype.addChild = function (child) { //child는 노드이다. 
  this.children.push(child);
  return child;
};

작성한 코드

이진 트리의 BFS 탐색을 활용하였다. 원리는 동일하다.

let bfs = function (node) {
  // TODO: 여기에 코드를 작성합니다.
  /*
  결과를 담을 배열을 선언한다.
  큐도 같이 선언한다. 
  우선 큐에다가 시작 노드를 담는다. 
  큐에서 맨 앞의 값을 빼서, 결과 배열에 담는다. 
  만약에 그 맨 앞의 값이 children 속성을 가진다면, 
	children 배열 안에 있는 모든 노드들을 큐에다가 담아야 한다. 
  */
  const visited = [];
  const queue = [];
  queue.push(node);

  while(queue.length){//큐는 while문과 함께 자주 사용된다. 
    let temp = queue.shift();
    visited.push(temp.value);
    if(temp.children.length){
      temp.children.forEach(child => {
        queue.push(child);
      })
    }
  }
  return visited;
};