JAVA/컬렉션 프레임워크
TreeSet
chanhee01
2023. 8. 3. 22:47
이진 검색 트리는 루트에서 시작해서 2개의 부모를 가지는 자료구조이다.
루트가 아닌 노드는 부모 노드와 left, right라는 2개의 자식 노드를 가지게 된다.
이진 검색 트리의 특징
- 모든 노드는 최대 2개의 자식 노드를 가질 수 있다.
- 왼쪽 자식노드의 값은 부모노드의 값보다 작고 오른쪽 자식노드의 값은 부모노드의 값보다 커야한다.
- 노드의 추가 삭제에 시간이 걸린다. -> 순차적으로 저장하지 않기 때문에
- 검색과 정렬기능이 배열이나 링크드 리스트에 비해 뛰어나다.
- 중복된 값을 저장하지 못한다.
자바에서 제공하는 Treeset은 저장할 때 이미 정렬하기 때문에 값을 읽을 때 별도의 정렬을 할 필요가 없다.
public class Main {
public static void main(String[] args) {
TreeSet set = new TreeSet<>();
Integer[] score = {70, 50, 100, 40, 60, 20, 30, 90};
for(int i = 0; i < score.length; i++)
set.add(score[i]);
System.out.println("50보다 작은 값 :", + set.headSet(new Integer(50)));
System.out.println("50보다 큰 값 :", + set.tailSet(new Integer(50)));
}
}
결과
50보다 작은 값 : [10, 35, 45]
50보다 큰 값 : [50, 65, 80, 95, 100]
위의 사진과 같이 50보다 작은 값들은 50 노드의 왼쪽 자식 노드와 그 아래이고, 나머지 값들은 50 노드의 오른쪽 자식과 부모 클래스의 오른쪽 노드들이다.