[토이7]
treeDFS
문제
임의의 tree를 구성하는 노드 중 하나의 Node 객체를 입력받아, 해당 노드를 시작으로 깊이 우선 탐색(DFS, Depth First Search)을 합니다. 이 때, 탐색되는 순서대로 노드의 값이 저장된 배열을 리턴해야 합니다.
입력
인자 1 : node
'value', 'children' 속성을 갖는 객체 (Node)
'node.value'는 number 타입
'node.children'은 Node를 요소로 갖는 배열
출력
배열을 리턴해야 합니다.
주의사항
생성자 함수(Node)와 메소드(addChild)는 변경하지 않아야 합니다.
let dfs = function (node) {
// TODO: 여기에 코드를 작성합니다.
let values = [node.value]; // values = [1] 탐색 시작 노드
node.children.forEach((n) => { // node의 자식노드의 el을 하나씩
// ParentNode.children
// ParentNode의 속성 children은 호출된 요소의 모든 자식 노드의 elements를 담고있는 실시간 HTMLCollection을 반환
values = values.concat( dfs(n) ); // concat(재귀함수)를 사용해서 하나씩 붙여
});
return values;
};
// 이 아래 코드는 변경하지 않아도 됩니다. 자유롭게 참고하세요.
let Node = function (value) {
this.value = value;
this.children = [];
};
// 위 Node 객체로 구성되는 트리는 매우 단순한 형태의 트리입니다.
// membership check(중복 확인)를 따로 하지 않습니다.
Node.prototype.addChild = function (child) {
this.children.push(child);
return child;
};
// this
// children
// addchildren
arr.forEach( callbackfunc ) |
---|
let arr = ["a", 2, "ddd", true]
arr.forEach( (el) => console.log(el) )
// a,2,ddd,true
function 최대공약수 (a,b) {
if(a%b === 0) {
return b
} else {
return 최대공약수 (b, a%b)
}
}
최대공약수 (24,18)
그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
스택자료구조 or 재귀함수를 이용
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다 (방문기준 : (보통) 번호가 낮은 인접 노드부터 시작)
2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 없으면, 스택에서 최상단 노드를 꺼낸다
3. 더이상 2의 과정을 수행할 수 없을 때까지 반복한다.
![]() | ![]() |
---|
graph = [[], [2,3,8], [1,7], [1,4,5], [3,5], [3,4], [7], [2,6,8], [1,7]]
visited = [false]*9
function dfx(graph, v, visited) {
// 현재 노드를 방문 처리
visited[v] = true; //??
return(v, end=" ") //??
// 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v] {
if(! visited[i])
dfs(graph, i, visited)
}
}
df(graph, 1, visited)
출처 : 동빈나님 유튜브 💚️