본문 바로가기
Algorithm

[Algorithm] treeBFS 알고리즘 Javascript Node.js 구현하기

by 개발자 염상진 2022. 6. 8.

 

 

treeBFS 알고리즘

 

문제

임의의 트리를 구성하는 노드 중 하나의 Node 객체를 입력받는다. 해당 Node를 시작으로 BFS(Breadth First Search) 알고리즘을 사용해서 전체 트리를 검색한다. 모든 Node의 value를 담은 배열을 반환한다.

 

입출력

  • 'value', 'children' 속성을 가지는 객체
  • typeof node.value = number;
  • typeof node.children = arr[Node]

 

예를 들어 입출력이 다음과 같이 주어질 때 전체 트리의 모습은 3 level로 구성된다. BFS 알고리즘은 동일 레벨을 우선적으로 탐색하기 때문에 최종적인 결과는 [1,2,3,4,5,7,6]이 될 것이다.

 

let root = new Node(1);
let rootChild1 = root.addChild(new Node(2));
let rootChild2 = root.addChild(new Node(3));
let leaf1 = rootChild1.addChild(new Node(4));
let leaf2 = rootChild1.addChild(new Node(5));
leaf1.addChild(new Node(6));
rootChild2.addChild(new Node(7));

 

BFS(너비 우선탐색) 알고리즘은 코드로 구현할 때 Queue를 사용한다. 데이터 입력은 뒤로 추가되고, 출력은 앞방향에서 나오면서 전체 트리를 검색한다.

 

반대로 DFS(깊이 우선 탐색) 알고리즘을 사용하는 경우 재귀 함수 호출을 사용하는게 일반적이다. leaf 노드 까지 검색을 진행한 후 다음 자식 노드를 검색한다.

BFS 알고리즘을 사용할 경우 자식노드 전체를 검색하여 queue에 push하기 때문에 최종적으로 모든 자식노드를 검색하는 방향으로 탐색이 진행된다. 위 트리 검색 결과 중 Queue에 삽입되는 데이터들은 다음 순서로 저장된다.

 

Javascript Code 구현

 

BFS에서는 Queue 자료구조를 사용한다. 입력받은 인수가 객체기 때문에 먼저 배열에 추가해준 뒤 while문을 사용해서 queue 배열이 모두 출력될 때 까지 반복을 진행한다.

let Node = function (value) {
    this.value = value;
    this.children = [];
  };
  
  Node.prototype.addChild = function (child) {
    this.children.push(child);
    return child;
  };
  
  let bfs = function (node) {

    const queue = [node];
    const result = [];

    while(queue.length > 0){
        const temp = queue.shift();

        result.push(temp.value);

        if(temp.children){
            queue.push(...temp.children);
        }
    }

    return result;
  };

 

 

 

 

[Algorithm] powerSet 알고리즘,문자열 부분 집합 문제 Javascript, Node.js

문제 하나의 집합으로 구성된 문자열을 입력받는다. 각각의 문자를 사용해서 만들 수 있는 모든 부분 집합을 반환하세요. 입력 string 타입, 공백 없는 소문자 알파벳 문자열 출력 배열을 반환한

about-tech.tistory.com

 

 

[Algorithm] 백준 2447번 별 찍기 - 10 Node.js Javascript

문제 링크 https://www.acmicpc.net/problem/2447 문제 재귀적인 패턴으로 별을 찍어보는 재귀 알고리즘 문제다. 3의 거듭제곱인 N이 주어지고 N x N으로 이뤄진 정사각형 안에서 특정 조건을 만족하는 별을

about-tech.tistory.com

 

 

[Algorithm] Binary Search 알고리즘 Javascript (반복, 재귀, 트리구조)

How to Imprement Binary Search Algorithm in Javascript? 이진(이분) 탐색 Binary Search 이진 탐색(Binary Search)란 검색 대상 데이터를 절반씩 나누어 가며 검색하는 방법이다. 데이터를 순차적으로 탐색하..

about-tech.tistory.com

 

댓글