노드들이 나무 가지처럼 연결된 비선형 계층적 자료구조
트리는 하나의 루트 노드를 갖는다.
루트 노드는 0개 이상의 자식 노드를 갖고 있다.
그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고, 이는 반복적으로 정의된다.
컴퓨터의 direcory구조가 트리 구조의 대표적인 예가 될 수 있다.
루트 노드(root node): 부모가 없는 노드, 트리는 하나의 루트 노드만을 가진다.
> A
내부(internal)노드 : 단말 노드가 아닌 노드
> A
B
C
D
E
단말 노드(leaf node): 자식이 없는 노드, ‘말단 노드’ 또는 ‘잎 노드’라고도 부른다.
> F
G
H
I
J
간선(edge): 노드를 연결하는 선 Link, branch 라고도 부른다.
형제(sibling) : 같은 부모를 가지는 노드
> H
I
노드의 크기(size): 자신을 포함한 모든 자손 노드의 개수
노드의 깊이(depth): 루트에서 어떤 노드에 도달하기 위해 거쳐야 하는 간선의 수
노드의 레벨(level): 트리의 특정 깊이를 가지는 노드의 집합
> root 노드부터 level0
노드의 차수(degree): 하위 트리 개수 / 간선 수 (degree) = 각 노드가 지닌 가지의 수
트리의 차수(degree of tree): 트리의 최대 차수
트리의 높이(height): 루트 노드에서 가장 깊숙히 있는 노드의 깊이
Order : 부모 노드가 가질 수 있는 최대 자식의 수
> Order 3 : 부모 노드는 최대 3명의 자식을 가질 수 있다.
Breadth : 리프 노드의 수
>Breadth : 5
트리에는 사이클이 존재할 수 없다.
모든 노드는 자료형으로 표현이 가능하다.
루트에서 한 노드로 가는 경로는 유일한 경로 뿐이다.
노드의 개수가 N
개면, 간선은 N-1
개를 가진다.
노드 6에는 2명의 부모 노드(8,5)가 있고 사이클(2-8-6-5)이 형성되므로 트리가 아니다.
그래프
와트리
의 차이는 사이클의 유무이다
1
개만 가진 트리left skew tree
,right skew tree
라고 한다.노드의 왼쪽 자식 < 부모의 값
노드의 오른쪽 자식 > 부모의 값
루트(Root)
에서 시작하여 왼쪽 자식 노드
다음 오른쪽 자식 노드
를 탐색하게 하는 방식으로 노드에 값이 존재하지 않을 때까지 순회(재귀)
하도록하는 탐색방식이다.
(Root → 왼쪽 자식 → 오른쪽 자식)
1 → 2 → 4 → 8 → 9 → 5 → 10 → 11 → 3 → 6 → 13 → 7 → 14
현재 노드의 왼쪽 자식노드
부터 시작해서 루트(Root)
, 그리고 마지막으로 오른쪽 자식 노드
를 순회하는 방법이다.
(왼쪽 자식 → Root → 오른쪽 자식)
8 → 4 → 9 → 2 → 10 → 5 → 11 → 1 → 6 → 13 → 3 →14 → 7
왼쪽 하위 트리
부터 하위를 모두 방문 후 루트(Root)
를 방문하는 방식이다.
(왼쪽 자식 → 오른쪽 자식 → Root)
8 → 9 → 4 → 10 → 11 → 5 → 2 → 13 → 6 → 14 → 7 → 3 → 1
루트(Root)
부터 계층 별로 방문하는 방식이다.
level(depth)순으로 위에서 아래로 그리고 왼쪽부터 오른쪽으로 순회하는 방법이다.
1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 13 → 14
효율적인 검색 속도
효율적인 삽입, 삭제 및 검색을 위해 트리 구조를 사용한다.
힙(Heap)
트리로 구성된 자료 구조
데이터 베이스 인덱싱
데이터베이스 인덱싱을 구현하는데 트리를 사용한다.
ex) B-Tree, B+Tree, AVL-Tree..
Trie
사전을 저장하는 데 사용되는 특별한 종류의 트리
트리 내용을 복기하기 참 좋은 글인 거 같습니다!