트리(Tree)는 노드로 구성된 계층적 자료구조이다. 트리 구조는 최상위 노드(Root)를 만들고, 루트 노드의 child를 추가하고, 그 child에 또 child를 추가하는 방식으로 구현할 수 있다. HTML의 DOM 구조와 같다.
이미지 출처: codestates urclass
Tree | Graph | |
---|---|---|
경로 | 트리는 그래프의 특별한 형태로 두 개의 노드 사이에는 1개의 경로만 있음 | 1개 이상의 경로가 존재하며 노드 사이에 일방향, 양방향 경로가 있음 |
루트 | 한 개의 루트 노드만 존재하며, 모든 자식노드는 하나의 부모노드만 가짐 | 루트 노드라는 개념이 존재하지 않음 |
순회 | 전위순회(Pre-Order), 중위순회(In-Order), 후위순회(Post-Order)로 이루어지며, 3가지 모두 DFS/BFS 알고리즘이 존재 | DFS 또는 BFS로 순회 |
종류 | 이진트리, 이진탐색트리, AVL트리, 힙(Heaps) | 방향 그래프, 무방향 그래프 |
간선 개수 | 노드(정점)개수 - 1 | 그래프에 따라 다름 |
모델 | 계층 모델 | 네트워크 모델 |
출처: http://freefeast.info/difference-between/difference-between-trees-and-graphs-trees-vs-graphs/ 내용 정리
class TreeNode {
constructor(value) {
this.value = value;
this.children = [];
}
//트리에 노드를 추가
insertNode(value) {
let node = new TreeNode(value);
this.children.push(node);
}
//트리에 해당 노드가 존재하는지 여부를 반환
contains(value) {
if(this.value === value){
return true;
}
for(let i = 0; i < this.children.length; i++){
if(this.children[i].contains(value)){
return true;
}
}
return false;
}
}