개발/자료구조

트리(Tree) 자료구조의 이해와 활용: 특징, 구현 및 사용 사례 알아보기

심집사 2023. 7. 8. 22:39

 

 

트리(Tree)는 계층적인 구조를 가진 자료구조로, 많은 분야에서 사용되며 효율적인 검색, 정렬 등의 연산을 가능하게 합니다. 이 글에서는 트리 자료구조의 특징, 구현 및 사용 사례를 살펴보겠습니다.

 

 

트리(Tree) 자료구조란?

 

트리는 계층 구조를 가진 노드(Node)로 구성된 비선형 자료구조입니다. 트리에는 루트 노드(Root Node), 부모 노드(Parent Node), 자식 노드(Child Node) 등으로 구성되며, 이러한 관계를 통해 일련의 노드들이 연결됩니다. 주요 용어로는:

  • 루트 노드(Root Node): 트리 구조의 첫 번째 노드로, 모든 노드의 조상입니다.
  • 부모 노드(Parent Node): 자식 노드를 가지고 있는 노드입니다.
  • 자식 노드(Child Node): 한 노드에 연결된 하위 노드입니다.

트리의 구현

  • 파이썬에서 트리를 구현하기 위해서는 노드 클래스와 트리 클래스를 정의합니다. 가장 간단한 형태의 트리인 이진 트리(Binary Tree)를 예로 들겠습니다.
python
class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None

class BinaryTree:
    def __init__(self, root):
        self.root = TreeNode(root)

    def insert(self, value):
        self._insert_recursive(self.root, value)

    def _insert_recursive(self, node, value):
        if not node:
            return TreeNode(value)
        if value < node.value:
            node.left = self._insert_recursive(node.left, value)
        else:
            node.right = self._insert_recursive(node.right, value)
        return node

    def inorder_traversal(self):
        return self._inorder_recursive(self.root, [])

    def _inorder_recursive(self, node, traversal):
        if node:
            traversal = self._inorder_recursive(node.left, traversal)
            traversal.append(node.value)
            traversal = self._inorder_recursive(node.right, traversal)
        return traversal

tree = BinaryTree(5)  # root 노드로 5를 설정
tree.insert(3)
tree.insert(8)
tree.insert(1)
tree.insert(4)
tree.insert(7)
tree.insert(9)

print(tree.inorder_traversal())  # 중위 순회 결과 => [1, 3, 4, 5, 7, 8, 9]

트리의 활용

트리 자료구조는 다양한 분야에 활용됩니다. 대표적인 사용 사례는 다음과 같습니다.

  • 계층 구조의 데이터 표현: 디렉토리 구조, 조직 구조 등 계층적인 관계를 표현할 때 사용합니다.
  • 검색 알고리즘: 이진 탐색 트리(Binary Search Tree)는 정렬된 데이터의 빠른 검색, 삽입, 삭제를 지원합니다.
  • 데이터 압축 알고리즘: 허프만 코딩(Huffman Coding) 등의 알고리즘에 활용하여 데이터 압축을 진행합니다.
  • 최소 신장 트리(Minimum Spanning Tree): 그래프의 모든 노드를 가장 적은 비용으로 연결하는 문제를 해결할 때 활용됩니다.

결론

 

트리(Tree)는 계층적인 구조를 가진 노드들로 구성된 자료구조로, 다양한 상황에서 효율적인 연산을 지원합니다. 이 글을 통해 트리의 기본적인 개념과 구현, 그리고 활용에 관한 이해를 도웠기를 바랍니다.