노드
- 루트 : 노드 중 최상위 노드
- 나머지 노드들은 N개의 분리집합으로 분리될 수 있다. 이것을 서브트리라고하다.
간선
노드와 노드를 연결하는 선으로 부모와 자식 노드를 연결한다.
형제 노드 : 같은 부모노드의 자식 노드들
조상 노드 : 간선을 따라 루트 노드까지 이르는 경로에 있는 모든 노드
서브트리 : 부모노드와 연결된 간선을 끊었을 때 생성되는 트리
자손 노드 : 서브 트리에 있는 하위레벨의 노드
차수(degree) : 노드에 연결된 자식 노드의 수
트리의 차수 : 트리에 있는 노드 중에서 가장 큰 값
단말 노드 : 차수가 0인 노드, 자식 노드가 없는 노드
노드의 높이 : 루트에서 노드에 이르는 간선의 수. 노드의 레벨
루트레벨 : 0
트리의 높이 : 트리에 있는 노드의 높이중에서 가장 큰 값
포화 이진 트리
모든 레벨에 노드가 포화상태로 차 있는 이진트리
높이가 h일때, 최대 노드 개수인 2^h+1 -1 노드를 가진 이진트리
완전 이진 트리
높이가 h이고 포화 이진트리의 노드번호 1번 부터 n번까지 빈자리가 없는 트리이다.
편향 이진 트리
높이 h에 대해, 최소 개수의 노드를 가지면서 한쪽방향의 자식 노드만을 가진 이진 트리이다.
특징
부모의 노드 번호는 2로 나누면 된다.
단점
사용하지않는 배열 원소에 대해 메모리 낭비가 난다.
- 너비 우선 탐색
- 깊이 우선 탐색
큐생성 ->
루트노드를 큐에 삽입 ->
큐가 비어있지 않은 동안 :
T : 큐의 첫번째 원소
T 를 방문하고,
for( T와 연결된 모든 간선에 대해 ){
U : T의 자식 노드
U를 큐에 삽입 하기
}
dfs(v){
v 방문
for(v의 모든 자식 노드 w) {
dfs(w)
}
}
전위 순회 VLR : 자신(부모)를 먼저 처리하고, 자식 노드를 좌우 순서로 방문한다.
중위 순회 LVR : 왼쪽자식 -> 자신(부모) -> 오른쪽 자식노드
후위 순회 LRV : 좌 -> 우 -> 자신
완전 이진 트리에 있는 노드 중에서 가장 큰 노드나 키 값이 가장 작은 노드를 찾기 위해서 만든 자료구조
- java.util.Priority.Queue()
원소들의 natual Ordering에 따라 Heap 유지한다.
따라서 모든 원소는 Comparable 인터페이스를 유지해야한다.- Comparator comparator - 명시된 구현에 따라 원소들의 순서를 유지한다.