배열을 이용한 트리 자료구조 구현하기

트리는 계층적인 데이터 구조를 나타내는 자료구조입니다. 트리는 노드(node)와 간선(edge)으로 이루어져 있으며, 노드 간의 계층적인 관계를 표현할 수 있습니다. 이번에는 배열을 이용하여 트리 자료구조를 구현하는 방법에 대해 알아보겠습니다.

배열을 이용한 트리 구조의 구현 방법

트리를 배열로 구현할 때는 각 노드를 배열의 요소로 표현합니다. 노드의 계층적인 관계를 표현하기 위해 각 노드는 인덱스를 가지고 있습니다. 예를 들어, 배열의 인덱스 0은 루트 노드를 나타내고, 인덱스 1은 루트 노드의 왼쪽 자식 노드를 나타내는 식으로 구현할 수 있습니다.

트리를 배열로 구현하는 방법은 다음과 같은 세 가지 요소로 이루어져 있습니다.

  1. 배열: 트리의 노드를 저장하는 배열입니다.
  2. 노드: 각 노드는 배열의 요소로 표현됩니다. 노드는 데이터와 배열 내에서의 위치(인덱스)를 가지고 있습니다.
  3. 인덱스 관계: 배열 내에서 노드 간의 계층적인 관계를 표현하기 위해 각 노드는 인덱스를 가지고 있습니다.

배열을 이용한 트리 구조의 구현 예시

아래는 배열을 이용하여 트리 자료구조를 구현한 예시 코드입니다. 이 예시 코드는 JavaScript로 작성되었습니다.

class TreeNode {
  constructor(data) {
    this.data = data;
  }
}

class Tree {
  constructor() {
    this.nodes = [];
  }

  insert(data, parentIndex) {
    const newNode = new TreeNode(data);
    this.nodes.push(newNode);
    const newNodeIndex = this.nodes.length - 1;

    if (parentIndex !== null && parentIndex < this.nodes.length) {
      const parentNode = this.nodes[parentIndex];
      if (!parentNode.children) {
        parentNode.children = [];
      }
      parentNode.children.push(newNodeIndex);
    }
  }

  print() {
    for (const node of this.nodes) {
      console.log(node.data);
    }
  }
}

// 트리 구조 생성
const tree = new Tree();

// 데이터 삽입
tree.insert("A", null); // 루트 노드
tree.insert("B", 0);    // 루트 노드의 왼쪽 자식 노드
tree.insert("C", 0);    // 루트 노드의 오른쪽 자식 노드
tree.insert("D", 1);    // B 노드의 왼쪽 자식 노드

// 트리 출력
tree.print();

위의 예시 코드에서는 Tree 클래스를 정의하고, TreeNode 클래스를 이용하여 트리의 각 노드를 표현합니다. insert 메소드를 통해 데이터를 삽입할 수 있고, print 메소드를 통해 트리를 출력할 수 있습니다.

이처럼 배열을 이용하여 트리 자료구조를 구현하면 트리의 계층적인 관계를 표현하고 다양한 트리 알고리즘을 구현할 수 있습니다.

결론

배열을 이용한 트리 자료구조의 구현은 간단하면서도 효율적인 방법입니다. 배열을 이용하면 노드 간의 관계를 쉽게 표현할 수 있고, 다양한 트리 알고리즘을 구현할 수 있습니다.