: 정점을 가리키는 간선이 하나밖에 없는 구조를 가지고 있는 방향 그래프의 일종
n
개인 트리는 반드시 n -1
개의 간선을 가진다.: 각 정점이 최대 2개의 자식을 가지는 트리
: 마지막 레벨을 제외하고 모든 정점이 채워져 있는 트리
: 한 방향으로만 정점이 이어져 있는 트리
: 마지막 레벨까지 모든 정점이 채워져 있는 트리
n
개인 이진 트리는 최악의 경우 높이(height)가 N
이 될 수 있다.n
개의 정점을 가진 편향 트리)n
개인 포화 / 완전 이진 트리의 높이는 log N
이다.h
인 포화 이진 트리는 2ʰ - 1
개의 정점을 가진다.: 1차원 배열 혹은 요소에 링크가 2개 존재하는 연결 리스트로 구현할 수 있다.
undefined
)index * 2
index * 2 + 1
floor(index / 2)
위의 트리를 배열로 나타내면 아래와 같다.
const tree = [undefined, 9, 3, 8, 2, 5, undefined, 7, undefined, undefined, undefined, 4];
const tree = [ u, // 0
9, // 1
3, 8, // 2 3
2, 5, u, 7, // 4 5 6 7
u, u, u, 4 ﹒ ﹒ ﹒ ﹒ // 8 9 10 11
];
위의 트리를 연결 리스트로 나타내면 아래처럼 표현할 수 있다.
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
class Tree {
contructor(node) {
this.root = node;
}
display() {
// Level Order
const queue = new Queue();
queue.enqueue(this.root);
while (queue.size) {
const currentNode = queue.dequeue();
console.log(currentNode.value);
if (currentNode.left) queue.enqueue(currentNode.left);
if (currentNode.right) queue.enqueue(currentNode.right);
}
}
}
const tree = new Tree(new Node(9));
tree.root.left = new Node(3);
tree.root.right = new Node(8);
tree.root.left.left = new Node(2);
tree.root.left.right = new Node(5);
tree.root.right.right = new Node(7);
tree.root.left.right.right = new Node(4);
알고리즘 너무 어려워요 ㅠㅠ 트리 자료구조 배울때 힘들었는데 깔끔하게 정리해주셔서 좀더 이해가 갔습니다