Data Structure

[자료구조] Tree

noahkim_ 2023. 10. 26. 16:26

1. Tree 란?

그래프의 일종
  • 노드들과 이 노드들을 연결하는 엣지들로 구성된 일종의 그래프

 

순환이 없는 연결 그래프
  • 모든 노드가 연결되어 있는 구조
  • 어떤 두 노드를 선택해도 경로는 항상 단 하나만 존재

 

계층형 구조
  • 루트노드부터 시작해서 여러 개의 하위 노드로 분기됩니다.
  • 각 노드는 0개 이상의 자식 노드를 가질 수 있습니다.

 

용어

         A (Root, Depth: 0, Height: 2, Level: 1)
       /   \
      /     \
     B       C (Node, Depth: 1, Height: 1, Level: 2)
    / \     / \
   D   E   F   G (Leaf, Depth: 2, Height: 0, Level: 3)
Node 트리를 구성하는 기본단위 입니다.
Root 트리의 최상위 노드입니다.
Leaf 자식노드가 없는 노드입니다.
SubTree 특정 노드와 그 노드의 모든 자손 노드로 구성된 트리입니다. (재귀적인 구조)
Level 트리에서 같은 깊이의 노드들의 집합을 의미합니다.
Depth 루트 노드에서 특정 노드까지 도달하기 위한 엣지의 수입니다.
Height 특정 노드에서 가장 멀리 떨어진 리프 노드까지의 엣지의 수입니다.

 

예시

  • 파일 시스템 (디렉토리)

 

2. 탐색

너비 우선 탐색 (BFS, Breath First Search)

  • 주어진 노드에서 시작해 인접한 모든 노드를 먼저 방문하고, 다시 해당 노드의 자식 노드들을 방문하는 방식입니다.
  • 큐(Queue)를 사용하여 구현할 수 있습니다.

 

깊이 우선 탐색 (DFS, Depth First Search)

  • 시작노드로부터 깊이를 따라 끝까지 탐색합니다.
  • 더이상 갈 곳이 없으면 가장 마지막에 만났던 갈림길에 있는 노드로 돌아와 다음 경로를 탐색하는 방식입니다.
  • 재귀 호출이나 스택(Stack)을 사용하여 구현할 수 있습니다.

 

3. 순회

     A
   /   \
  B     C
 / \   / \
D   E F   G

전위 순회 (Preorder Traversal)

  • 트리의 노드를 방문하는 순서는 "루트(자신) -> 왼쪽 서브트리 -> 오른쪽 서브트리" 입니다.
  • A -> B -> D -> E -> C -> F -> G

 

중위 순회 (Inorder Traversal)

  • 트리의 노드를 방문하는 순서는 "왼쪽 서브트리 -> 루트(자신) -> 오른쪽 서브트리" 입니다.
  • D -> B -> E -> A -> F -> C -> G
    • 정렬된 순서의 출력을 얻을 수 있습니다.

 

후위 순회 (Postorder Traversal)

  • 트리의 노드를 방문하는 순서는 "왼쪽 서브트리 -> 오른쪽 서브트리 ->  루트(자신)" 입니다.
  • D -> E -> B -> F -> G -> C -> A

 

3. 종류

이진 트리

  • 각 노드가 최대 두 개의 자식노드를 가지는 트리입니다.

 

포화 이진 트리 (perfect binary tree)
    A
   / \
  B   C
 / \ / \
D  E F  G
  • 모든 레벨이 완전히 채워져 있는 이진트리입니다.

 

완전 이진 트리 (complete binary tree)
    A
   / \
  B   C
 / \ / 
D  E F
  • 마지막 레벨을 제외한 모든 레벨이 모두 차있는 이진트리입니다.
  • 마지막 레벨의 노드들은 왼쪽부터 채워져 있습니다.

 

균형 이진 트리 (balanced binary tree)
    A
   / \
  B   C
 /     \
D       E
  • 이진 트리에서 모든 리프노드까지의 거리가 거의 동일한 트리입니다.

 

다진트리

  • 각 노드가 세 개의 이상의 자식노드를 가지는 트리입니다.

 

4. 사례

DOM 웹 페이지의 구조를 표현하는데 사용되는 트리구조입니다.
HTML, XML 등에서 사용됩니다.
AST 프로그램의 구조를 표현하기 위한 트리입니다.
컴파일러나 인터프리터에서 소스코드를 분석할 때 사용됩니다.
Search Tree 효율적인 검색, 삽입, 삭제 연산을 지원하기 위한 트리구조 입니다.

 

 

 

출처

'Data Structure' 카테고리의 다른 글

[고급 자료구조] Tree: Trie  (0) 2023.10.26
[자료구조] Graph  (0) 2023.10.26
[기초 자료구조] HashTable  (0) 2023.10.26
[기초 자료구조] Stack  (0) 2023.10.26
[기초 자료구조] Queue  (0) 2023.10.26