나무 가지처럼 연결된 노드로 이루어진 자료 구조
비선형으로, 가계도와 같은 계층적인 구조를
표현할 때 사용할 수 있다.
노드(node)
: A, B, C, D, E, F, G, H, I , J
트리를 구성하고 있는 기본 요소
노드에는 키 또는 값과 하위 노드에 대한 포인터를 가지고 있음.
간선(edge)
:
노드를 연결하는 선 (link, branch 라고도 부름)
루트 노드(root node)
: A
부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다.
부모 노드 (parent node)
: H, I 의 부모 노드는 D
자식 노드를 가진 노드
자식 노드 (child node)
: D의 자식 노드는 H, I
부모 노드의 하위 노드
형제 노드 (sibling node)
: H, I는 형제 노드
같은 부모를 가지는 노드
단말 노드(terminal node)
: H, I, J, F, G
= 외부 노드(external node, outer node)
= 말단 노드 = 리프 노드(leaf node)
자식이 없는 노드
내부(internal) 노드
: A, B, C, D, E
자식을 하나 이상 가진 노드
깊이(depth)
: D의 깊이 = 2
루트에서 어떤 노드에 도달하기 위해 거쳐야 하는
간선의 수
높이(height)
: A 노드의 높이 = 3
어떤 노드에서 리프 노드까지
가장 긴 경로의 간선(Edge) 수
= 깊이의 최댓값
레벨(level)
:
트리의 특정 깊이를 가지는 노드의 집합
차수(degree)
: A의 차수 = 2
하위 트리 개수 / 간선 수 (degree) =
각 노드가 지닌 가지의 수
Leaf node의 degree : 0
트리의 차수(degree of tree)
:
트리의 최대 차수
경로(path)
: A & H 경로 : A-B-D-H
한 노드에서 다른 한 노드에 이르는 길 사이에 놓여있는 노드들의 순서
경로 길이(path length)
: A & H 경로 길이 = 4
해당 경로에 있는 총노드의 수
크기(size)
: 노드 B의 size = 6
자신을 포함한 모든 자손 노드의 개수
너비(width)
: Level 2 width = 4
레벨에 있는 노드 수
폭(breadth)
: Breadth = 5
리프 노드의 수
거리(distance)
: D와 J의 Distance = 3
두 노드 사이의 최단 경로에 있는 간선(Edge)의 수
order
:
부모 노드가 가질 수 있는 최대 자식의 수
ex. Order 3
= 부모 노드는 최대 3명의 자식을 가질 수 있다.
트리 자료구조에 포함된 노드를
특정한 방법으로 한 번씩 방문하는 방법.
트리의 정보를 시각적으로 확인할 수 있다.
ArrayList< ArrayList > list = new ArrayList<>();
class Node { int num, dist; // 노드 번호, 거리 }
정의ArrayList[] list = new ArrayList[정점의 수 + 1];
모든 노드들이 자식을 하나만 가진 트리
왼쪽 방향으로 자식을 하나씩만 가질 때 left skew tree
오른쪽 방향으로 하나씩만 가질 때 right skew tree
라고 함.
각 노드의 차수(자식 노드)가 2 이하인 트리
완전 이진 트리(Complete Binary Tree)
전 이진 트리
(Full Binary Tree 또는 Strictly Binary Tree)
모든 노드가 0개 또는 2개의 자식 노드를 갖는 트리.
포화 이진 트리(Perfect Binary Tree)
순서화된 이진 트리
노드의 왼쪽 자식은 부모의 값보다 작은 값을 가져야 하며 노드의 오른쪽 자식은 부모의 값보다 큰 값을 가져야 함.
(모든 왼쪽 자식 <= 부모 노드 < 모든 오른쪽 자식)
최대 m개의 서브 트리를 갖는 탐색 트리
이진 탐색 트리의 확장된 형태로 높이를 줄이기 위해 사용함.
m원 탐색 트리에서 높이 균형을 유지하는 트리
height-balanced m-way tree라고도 함.
ex. 레드 - 블랙 트리, AVL 트리
트리는 데이터를 계층 구조로 저장하는 데 사용
ex. 파일 및 폴더는 계층적 트리 형태로 저장
효율적인 삽입, 삭제 및 검색을 위해 트리 구조를 사용
힙도 트리로 된 자료 구조이다.
힙(heap)이란 참고
데이터베이스 인덱싱을 구현하는데 트리를 사용
ex) B-Tree, B+Tree, AVL-Tree..
사전을 저장하는 데 사용되는 특별한 종류의 트리
접두사 트리(Prefix Tree)라고도 부름.
n-차 트리(n-ary Tree)의 변종
각 노드에 문자를 저장하는 자료구조
따라서 트리를 아래쪽으로 순회하면 단어 하나가 나온다.
접두사를 빠르게 찾아보기 위한 흔한 방식으로,
모든 언어를 트라이에 저장해 놓는 방식이 있다.
유효한 단어 집합을 이용 하는 많은 문제들은 트라이를 통해 최적화할 수 있다.
코딩 테스트를 위한 트리(Tree) 자료구조 10분 핵심 요약
[자료구조] 트리 (Tree)
[자료구조] 트리(Tree)란