자식 노드의 개수가 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;
};