Hello

Java TreeSet, 이진 탐색 트리(binary seach tree), TreeSet 생성자 · 메서드, 트리 순회(tree traversal)

by 볼빵빵오춘기

TreeSet - 범위 탐색, 정렬

  • 이진 탐색 트리(binary search tree)로 구현. 범위 탐색과 정렬에 유리하다.
  • 이진 트리는 모든 노트가 최대 2개의 하위 노드를 갖는다. 각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)되어있다.
class TreeNode{
	TreeNode left; // 왼쪽 자식노드
	Object element; // 저장할 객체
	TreeNode right; // 오른쪽 자식노드
}

 

이진 탐색 트리(binary seach tree)

부모보다 작은 값은 왼쪽 큰 값은 오른쪽에 저장한다.

데이터가 많아질 수록 추가, 삭제에 시간이 더 걸린다.(비교 횟수 증가)

 

TreeSet - 데이터 저장과정 boolean add(Object o)

중복 x, TreeSet 7,4,9,1,5의 순서로 데이터를 저장하면, 아래의 과정을 거친다.

 

TreeSet 생성자 · 메서드

TreeSet 생성자

  • TreeSet()
    기본생성자

 

  • TreeSet(Collection c)
    주어진 컬렉션을 저장하는 TreeSet을 생성

 

  • TreeSet(Comparator comp)
    주어진 정렬기준으로 정렬하는 TreeSet을 생성

 

TreeSet 메서드

  • Object first()
    정렬된 순서에서 첫 번째 객체를 반환한다.

 

  • Object last()
    정렬된 순서에서 마지막 객체를 반환한다.

 

  • Object ceiling(Object o)
    지정된 객체와 같은 객체를 반환한다.(없으면 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환, 없으면 null을 반환)

 

  • Object floor(Object o)
    지정된 객체와 같은 객체를 반환한다.(없으면 작은 값을 가진 객체 중 제일 가까운 값의 객체를 반환, 없으면 null을 반환)

 

  • Object higher(Object o)
    지정된 객체보다 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환한다.(없으면 null을 반환)

 

  • Object lower(Object o)
    지정된 객체보다 작은 값을 가진 객체 중 제일 가까운 값의 객체를 반환한다.(없으면 null을 반환)

 

  • SortedSet subSet(Object fromElement, Object toElement)
    범위 검색(fromElement와 toElement사이)의 결과를 반환한다.(끝 범위인 toElement는 범위에 포함되지않는다. fromElement ≤ x < toElement)

 

  • SortedSet headSet(Object toElement)
    지정된 객체보다 작은 값의 객체들을 반환한다.

 

  • SortedSet tailSet(Object formElement)
    지정된 객체보다 큰 값의 객체들을 반환한다.

 

예제 코드

예제 코드1

더보기
import java.util.*;

public class Try {

	public static void main(String[] args) {
		Set set = new TreeSet();
		
		for(int i =0; set.size()<6;i++) {
			int num = (int)(Math.random()*45+1);
			set.add(num); // set.add(new Integer(num));
			System.out.println(set);
		}
		System.out.println("----final set----");
		System.out.println(set);
	}

}

⇒ 결과를 보면 정렬이 필요없는 것을 확인할 수 있다.

예제 코드2

더보기
import java.util.*;

public class Try {

	public static void main(String[] args) {
		Set set = new TreeSet(new TestComp());
		
		set.add(new Test());
		set.add(new Test());
		set.add(new Test());
		set.add(new Test());
		System.out.println(set);
	}

}

class Test{}

class TestComp implements Comparator{
	@Override
	public int compare(Object o1, Object o2) {
		return -1;
	}
}

예제 코드3

더보기
import java.util.*;

public class Try {

	public static void main(String[] args) {
		Set set = new TreeSet();
		
		set.add(new Test());
		set.add(new Test());
		set.add(new Test());
		set.add(new Test());
		System.out.println(set);
	}

}

class Test implements Comparable{

	@Override
	public int compareTo(Object o) {
		return -1;
	}
}

예제 코드4

더보기
import java.util.*;

public class Try {

	public static void main(String[] args) {
		TreeSet set = new TreeSet();

		String from = "b";
		String to	= "d";

		set.add("abc");      set.add("alien");    set.add("bat");
		set.add("car");      set.add("Car");      set.add("disc");
		set.add("dance");    set.add("dZZZZ");    set.add("dzzzz");
		set.add("elephant"); set.add("elevator"); set.add("fan");
		set.add("flower");

		System.out.println(set);
		System.out.println("range search : from " + from  +" to "+ to);
		System.out.println("result1 : " + set.subSet(from, to));
		System.out.println("result2 : " + set.subSet(from, to + "zzz"));
	}

}

예제 코드5

더보기
		TreeSet set = new TreeSet();
		int[] score = {80, 95, 50, 35, 45, 65, 10, 100};

		for(int i=0; i < score.length; i++)
			set.add(new Integer(score[i]));

		System.out.println("50보다 작은 값 :" + set.headSet(new Integer(50)));
		System.out.println("50보다 큰 값 :"  + set.tailSet(new Integer(50)));

⇒ TreeSet만 가능 HashSet은 불가능 이유는 아래에 있음

 

TreeSet - 범위검색 메서드

메서드 설명은 위에 메서드 참고

  • SortedSet subSet(Object fromElement, Object toElement)
  • SortedSet headSet(Object toElement)
  • SortedSet tailSet(Object formElement)

 

✨ 트리 순회(tree traversal)

  • 이진 트리의 모든 노드를 한번씩 읽는 것을 트리 순회라고 한다.
  • 전위순회, 후위순회, 중위순회, 레벨순회 등 순회방법이 있다.
  • 중위 순회하면 오름차순으로 정렬된다. (⇒ 정렬에 유리한 이유이다.)

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기