[자료구조] 탐색트리 -1
- 본문과 관련하여 실습한 전체코드는 리파지토리에 별도 작성하였습니다.
- https://github.com/ejImDev/data_structure_study.git
탐색트리
- 저장된 데이터에 대해 탐색, 삽입, 삭제, 갱신 등의 연산을 수행할 수 있는 자료구조
- 배열이나 연결리스트는 각 연산을 수행하는데 O(N) 시간이 소요
- 스택이나 큐는 특정 작업에 적합한 자료구조
- 이진탐색트리, AVL트리, 2-3트리, 레드블랙트리, B트리 등
이진탐색트리 (BST)
- 이진탐색의 개념을 트리 형태의 구조에 접목한 자료구조
- 이진탐색 : 정렬된 데이터의 중간에 위치한 항목을 기준으로 데이터를 두 부분으로 나누어 가며 특정 항목을 찾는 탐색 방법 (데이터는 오름차순으로 정렬 되어있어야 함)
- 이진탐색트리의 특징 중 하나는 트리를 중위순회하면 정렬되어 출력 됨
- 이진탐색트리는 이진트리로서 각 노드가 다음과 같은 조건을 만족함
- 각 노드 n의 키값이 n의 왼쪽 서브트리에 있는 노드들의 키값보다 크고, 오른쪽 서브트리에 있는 노드들의 키값보다 작다.
- 각 노드 n의 키값이 n의 왼쪽 서브트리에 있는 노드들의 키값보다 크고, 오른쪽 서브트리에 있는 노드들의 키값보다 작다.
이진탐색트리 구현
- 노드 클래스는 이진트리의 구현에 사용된 노드와 거의 유사
- 노드 객체는 id(키), name(키에 관련된 정보), 왼쪽 자식과 오른쪽 자식을 각각 가리키기 위한 left, right
- 노드 클래스
public class Node <Key extends Comparable<Key>, Value> { private Key id; private Value name; private Node left, right; public Node(Key newId, Value newName){ id = newId; name = newName; left = right = null; } public Key getKey() { return id; } public Value getValue() { return name; } public Node getLeft() { return left; } public Node getRight() { return right; } public void setKey(Key newId) { id = newId; } public void setValue(Value newName) {name = newName; } public void setLeft(Node newLeft) {left = newLeft; } public void setRight(Node newRight) {right = newRight; } }
- BST 클래스
public class BST<Key extends Comparable<Key>, Value>{ public Node root; public Node getRoot() { return root; } public BST(Key newId, Value newName){ root = new Node(newId, newName); } ... }
참고 자료 : ‘경기대학교 소프트웨어중심대학사업단 - JAVA 자료구조’ https://youtu.be/G-vfkaLP2vo