실생활 에서
아래와 같이
계층적 구조를 갖습니다
.예를 들어, 회사의 조직 구조는 아래와 같이 트리로 표현될 수 있습니다.
조직 구조 외에도 가계도, 지방, 도시 등을 트리 구조를 사용하여 표현할 수 있습니다.
아래와 같이 트리에 대한 많은 용어가 있습니다.
n=0
이면 빈 트리라고 합니다ADH
입니다.DOM 트리, 계단식 선택, 트리 구성 요소 등과 같이 프런트 엔드에서 가장 일반적인 데이터 구조 중 하나라고 할 수 있습니다.
JavaScript는 트리 데이터 구조를 제공하지 않지만 사용할 수 있습니다.
다음 코드와 같이
트리를 시뮬레이션하기 위한 객체 및 배열
:const tree = { 값: 'A', 어린이들: [ { 값: 'B', 어린이들: [ { 값: 'E', 하위 항목: null }, { 값: 'F', 하위 항목: null }, ], }, { 값: 'C', 어린이: [{ 값: 'G', 어린이: null }], }, { 값: 'D', 어린이들: [ { 값: 'H', 하위 항목: null }, { 값: '나', 하위: null }, ], }, ], }
소위 깊이 우선 순회 알고리즘은 트리의 가지를 최대한 깊이 검색하는 것입니다. 순회 순서는 다음과 같습니다.
구현 아이디어는 다음과 같습니다.
children
에 대한 깊이 우선 탐색(재귀)을 계속합니다.구현 코드는 다음과 같습니다.
function dfs(root) { console.log(루트.값) root.children && root.children.forEach(dfs) // 다음과 일치 // if (root.children) { // root.children.forEach(child => { //dfs(자식) // }) // } } dfs(tree) //이 트리는 이전에 정의된 트리입니다./* 결과 A 비 이자형 에프 기음 G 디 시간 나 */
보시다시피 순서가 그림과 일치하므로 우리 알고리즘에는 문제가 없습니다.
폭 우선소위 폭 우선순위(Breadth Priority)는 루트 노드에 가장 가까운 노드를 순서대로 방문하는 것입니다.
구현 아이디어는 다음과 같습니다.
children
해당 대기열에구현 코드는 다음과 같습니다:
function bfs(root) { // 1. 새 대기열을 만들고 대기열에 노드를 추가합니다. const q = [root] // 4 반복하는 동안 (q.length > 0) { const node = q.shift() // 2개의 큐 헤드가 큐에서 제거됨 console.log(node.value) // 팀장인 3명의 어린이가 팀에 추가됩니다. node.children && node.children.forEach(자식 => { q.push(자식) }) } } BFS(트리) /* 결과 A 비 기음 디 이자형 에프 G 시간 나 */
보시다시피 순서가 그림과 일치하므로 우리 알고리즘에는 문제가 없습니다.