tree는 연결리스트, 배열과는 다른게 계층적 자료구조이다.
이런 구조를 사용하는 예시로는 파일 시스템,사전,네트워크 라우팅 알고리즘이 있다
구성요소로는 아래와 같은 부분이 있다
트리는 항상 하나의 루트 노드를 가지고 있고 이 루트 노드는 자식 노드를 가질 수 있고 새롭게 생성된 자식 노드 또한 자식을 가질 수 있다 그림을 그려 보면 아래와 같다
.addChild()
.contains()
자식노드가 최대 2개까지만 붙는 트리를 Binary Tree라고 한다
Compelete binary tree : 제일 마지막 층이 왼쪽 부터 채워진 트리
Full binary tree : 자식을 가지면 무조건 2개인 경우이거나 아예 없는 경우
Perfect Binary Tree : 모든 층이 가득차 있는 binary tree
Binary Search Tree : 부모노드의 왼쪽 자식과 오른쪽 자식이 일정한 정렬 규칙으로 정렬되어 있는 tree
자식노드가 최대 2개까지만 붙는 트리를 Binary Tree라고 하며 이 Binary Tree에서 약간의 규칙이 적용된 트리가 Binary Search Tree라고 한다 예시로는 아래의 그림이 있다
function insert(tree,node){
//node를 현재 tree의 value와 비교를 한다
//크다면 오른쪽 노드의 자식이 있는지 확인하고
// 있으면 insert 재귀호충 (tree -> right,node)
// 없으면 오른쪽 삽입
//작다면 왼쪽 노드의 자식이 있는지 확인하고
// 있으면 insert 재귀호충 (tree -> left,node)
// 없으면 왼쪽 삽입
삭제해야 될 노드가 자식이 없는 경우 : search 함수 알고리즘으로 노드를 찾아서 삭제해 주면 된다
삭제해야 될 노드의 자식이 하나인 경우
삭제해야 될 노드의 자식이 2개인 노드인 경우 방법이 두개가 있다