자료구조

[ 자료구조 ] 트리(Tree)

HeoN97 2023. 5. 17. 01:13

1. 트리(Tree)


트리는 노드(Node)로 이루어져 있는 자료 구조입니다.

  • 트리는 하나의 루트 노드를 갖고 있으며, 0개 이상의 자식 노드를 갖고 있습니다.
  • 데이터를 순차적으로 저장하지 않기 때문에 비선형 자료구조입니다.
  • 노드 간에 부모 자식 관계를 갖고 있는 계층형 자료구조이며 모든 자식 노드는 하나의 부모 노드만 갖고 있습니다.
  • 순환이 존재하지 않습니다.
  • 트리 내에 또 다른 트리가 존재하는 재귀적 자료구조입니다.

 

 

 

2. 트리의 구성 요소 및 관련 용어


1) 트리의 구성요소

노드 ( Node )

    - 트리를 구성하고 있는 기본 요소

    - 정점이라고도 부른다.

간선 ( Edge )

    - 노드와 노드를 연결하는 선

    - 노드의 개수를 N개라고 하면, 간선의 개수는 N-1개이다.

루트노드 ( Root Node )

    - 트리 구조에서 부모가 없는 가장 최상위에 위치한 노드

부모노드 ( Parent Node )

    - 자식 노드를 가지고 있는 노드

자식노드 ( Child Node )

    - 부모 노드의 하위에 위치한 노드

형제노드 ( Sibling Node )

    - 같은 부모를 가진 노드

리프노드 ( Leaf Node )

    - 외부노드 ( External Node, Outer Node ), 단말노드 ( Terminal Node )

    - 자식 노드가 없는 노드

가지노드 ( Branch Node )

    - 내부노드 ( Internal Node, Inner Node ), 비단말노드 ( Non-Terminal Node )

    - 자식 노드를 1개 이상 가지고 있는 노드

 

2) 트리 관련 용어

깊이 ( Depth )

    - 루트에서 어떤 노드까지 도달하기 위한 간선(Edge)의 수

    - B의 Depth : 1

레벨 ( Level )

    - 트리에서 동일한 깊이를 가지고 있는 노드의 집합

    - B의 Level : 1

높이 ( Height )

    - 루트에서 가장 하위의 단말노드까지의 깊이(Depth)

    - Tree A의 Height : 4

크기 ( Size )

    - 자신을 포함한 모든 자식 노드의 개수를 합한 개수

    - B의 Size : 6

차수 ( Degree )

    - 자식 노드의 개수

    - B의 Degree : 2

트리의 차수 ( Degree of Tree )

    - 트리의 최대 차수

    - Tree A의 최대 차수 : 2

경로 ( Path )

    - 한 노드에서 다른 노드 사이에 있는 노드들의 순서

    - A ~ D의 Path : A-B-D

경로의 길이 ( Path Length )

    - Path 경로 위에 있는 노드의 총 개수

    - A ~ D의 Path Length : 3

너비 ( Width )

    - 해당 Level에 있는 노드의 수

    - Level 2의 Width : 4

넓이 ( Breadth )

    - 리프 노드의 수

    - Tree A의 Breadth : 5

거리 ( Distance )

    - 두 노드 사이의 최단 경로에 있는 간선(Edge)의 수

    - D와 J의 Distance : 3

계수 ( Order )

    - 부모 노드가 가질 수 있는 최대 자식 수 ( 이진 트리는 Order = 2 )

    - Tree A의 Order : 2

 

 

 

3. 이진 트리의 순회


 - 순회방법에는 크게 세가지 방법이 있습니다. ( 전위 순회, 중위 순회, 후위 순회 )

 - 노드의 우선순위를 어떻게 두는지에 따라서 이름이 달라집니다

 

1) 전위 순회

  • 우선순위 : 현재 노드 > 왼쪽 자식 노드 > 오른쪽 자식 노드

 

2) 중위 순회

  • 우선순위 : 왼쪽 자식 노드 > 현재 노드 > 오른쪽 자식 노드

 

3) 후위 순회

  • 우선순위 : 왼쪽 자식 노드 > 오른쪽 자식 노드 > 현재 노드

 

 

 

4. 트리의 종류


1) 이진트리( Binary Tree )

  • 부모 노드가 자식 노드를 최대 2개씩만 갖고 있는 트리
  • 2개 이상 가지는 경우 삼항 트리( Ternary tree )라고 합니다.

 

2) 이진 검색 트리( BST : Binary Search Tree )

  • 부모 노드가 자식 노드를 최대 2개씩만 갖고 있는 트리 ( 이진 트리의 특징을 지님 )
  • 노드의 왼쪽 자식의 값이 반드시 자신의 값 이하이며, 오른쪽 자식의 값은 반드시 자신의 값 이상입니다.
  • 중복 값은 제외

 

3) 포화 이진 트리( Full Binary Tree )

  • Leaf Node를 제외한 모든 노드의 차수가 2개로 이루어져 있는 트리
  • 해당 차수에 몇 개의 노드가 존재하는지 파악할 때 용이합니다.

 

4) 완전 이진 트리( Complete Binary Tree )

  • 포화 이진 트리와 같은 개념으로 트리를 생성하지만, 모든 노드가 왼쪽부터 차근차근 생성되는 이진트리
  • Heap은 완전 이진 트리의 일종입니다.

 

 

 

5. 트리 구조 활용


  • 최댓값, 최솟값을 빠르게 알고 싶을 때
  • 계층적인 데이터 저장하고자 할 때 ( ex. 컴퓨터의 폴더 구조 )
  • heap ( 우선순위 큐 )

 

 

 

마치며


트리의 기본 개념과 관련된 용어를 알아볼 수 있었습니다.

단순해보이는 자료구조이면서도 실생활에서 자주 사용되기 때문에 알아두면 좋은 구조라고 생각됩니다.

 

 

 

※ 참고

- https://thinking-developer.tistory.com/70

- https://yoongrammer.tistory.com/68