class Node {
Object item;
Node left;
Node right;
}
이진 탐색 트리의 핵심은
입력 시점에 데이터를 정렬해서 보관한다는 것이다
작은 값은 왼쪽에, 큰 값은 오른쪽에 저장한다
이진 탐색 트리의 연산은 한 번에 절반 씩의 데이터를 날리고
남은 절반에 대해서만 연산을 지속한다는 것이다
따라서 평균 O(log n), 최악의 경우 O(n) 의 시간 복잡도를 가지고
이는 리스트보다 빠르고 해시보다는 느리다
대체로 O(log n) 이지만
트리의 균형이 깨진 경우 O(n) 까지 나올 수 있다
이 때는 트리의 균형을 동적으로 맞춘다
균형을 맞추는 알고리즘을 가진 AVL 트리, 레드-블랙 트리 등의 다양한 트리가 존재한다
자바에서는 레드-블랙 트리를 사용해 균형을 지속적으로 유지하고
따라서 최악의 경우에도 O(log n) 을 유지할 수 ㅣㅇㅆ다
기준이 되는 노드로부터 모든 왼쪽 노드를 처리 후에 오른쪽 노드를 처리하는 방식
기준이 되는 노드는 중앙이기 때문에
왼쪽 - 기준 - 오른쪽
순서가 된다
이 순서는 순회 중 모든 경우에서 동일하게 진행된다
Set 인터페이스 구현체 HashSet, LinkedHashSet, TreeSet 에서
iterator() 를 호출하면 컬렉션 내부 값을 리스트처럼 하나씩 호출할 수 있다
Interator<String> iterator = set.iterator();
while(iterator.hasNext()) {
sout(iterator.next() + " ");
}
TreeSet 정렬 시 문자열 등 순서가 없는 데이터에 대한 정렬 기준을
Comparable, Comparator 인터페이스를 구현하여 지정할 수 있다