날이 좋아서 자전거를 잠깐 타고 왔는데 저녁먹고 너무 졸려서 30분만 잔다고 알람을 맞춰놨다.
역시, 3시간을 자버렸다.
잠자리를 뒤척이며 새벽에 잠들지 못할 미래의 나에게 미안하지만
오랜만에 잠다운 잠을 자서 피곤이 풀렸다!
그래도 얼른 블로깅을 마치고 잠자러 가야겠다.
그래프의 한 종류
일방향 그래프
내 생각엔 Tree 보단 Root에 가깝다.
(이게 Tree인지.. Root인지..)
부모 노드에서 시작해 자식노드로 뻗어 나가는 계층적 자료구조이기 때문이다.
그래서 싸이클이 존재할 수 없고 순서가 없기 때문에 비선형 구조이다.
첫 번째 노드에서 찾고자하는 노드까지 가는 방법은 딱 하나, 유일하다.
컴퓨터 폴더, 조직도, 가계도, 대진표
class Tree() {
constructor (value) {
this.value = value
this.children = [];
}
addChild(value) {
const childNode = new Tree(value) // Tree의 자식 노드를 먼저 만들고
this.children.push(childNode) // Tree의 자식 배열에 넣어준다
}
contains(value) {
if(this.value === value) { // 현재 value와 찾고자 하는 value가 같다면
retrun true; // true 반환
}
// 찾고자 하는 value가 현재 노드에 없다면
for(let i = 0; i < this.children.length; i++) { // 현재 노드의 자식 노드를 순회한다
let childNode = this.children[i]
if(childNode.contains(value)) { // 자식 노드에 contains메소드를 활용해 찾고자하는 value를 찾는다
return true; // 자식 노드에서 찾았다면 true를 반환한다
}
}
return false; // 전부 순회하면서 찾아도 찾고자하는 value가 없으면 false를 반환한다
}
}
최대 2개의 자식 노드를 가진다.
출처: codestates
부모보다 작으면 왼쪽, 부모보다 크면 오른쪽
찾고자 하는 값을 굉장히 빠르게 찾을 수 있다.
up-down 게임을 생각해보자.
0~100까지 숫자를 골라 출제자가 생각하고 있는 숫자를 맞추는 게임이다.
만약 출제자가 76을 생각하고 있다고 가정해보자.
40 -> up
그럼 0~40은 생각할 필요가 없어진다.
80 -> down
80~100은 배제해도 된다.
0부터 100까지 전부 순회하면서 찾을 필요 없이
찾고자하는 값을 이분하여 보다 빠르게 찾을 수 있다.
노드가 한쪽으로 몰려 이진 탐색 트리의 의미가 퇴색 될 수 있다.
이러한 불균형을 막기 위해 균형 이진 탐색 트리(Balanced Binary Search Tree)가 생겨났다.
균형 이진 탐색 트리란 부모와 자식의 대소 관계를 비교해 위치를 바꿔준다고 할 수 있다. (루트 노드는 고정)
출처: https://jackpot53.tistory.com/17