더북(TheBook)

2.4.5 N-항 트리

지금까지는 주로 이진 트리에 대해 살펴봤습니다. 이번에 살펴볼 N-항 트리(N-ary tree)는 각 노드가 N개의 자식을 가질 수 있습니다. N은 임의의 양수이므로 N개의 자식 노드는 벡터를 이용하여 저장할 수 있습니다. 그러므로 N-항 트리는 다음과 같이 구현할 수 있습니다.

struct nTree
{
    int data;
    std::vector<nTree*> children;
};

위 코드에서 각각의 노드는 임의 개수의 자식을 거느릴 수 있습니다. 그러므로 전체 트리도 임의의 형태를 가지게 됩니다. 평범한 이진 트리를 많이 사용하지 않는 것처럼 평범한 N-항 트리도 그다지 유용하지 않습니다. 그러므로 응용 프로그램의 요구 사항에 맞는 형태의 트리를 만들어 사용해야 합니다. 앞서 그림 2-1에 나타냈던 회사의 조직도가 N-항 트리의 예입니다.

컴퓨터 분야에서 N-항 트리를 사용하는 대표적인 예는 다음과 같습니다.

컴퓨터 파일 시스템 구조: 리눅스에서는 루트(/)부터, 윈도에서는 드라이브 이름(C:\)부터 시작해서 다수의 파일과 폴더를 가질 수 있습니다. 파일 시스템 구조와 관련해서는 바로 다음에 나오는 ‘실습 문제 4: 파일 시스템 자료 구조 만들기’에서 자세히 알아보겠습니다.

컴파일러: 대부분의 컴파일러는 표준 문법에 근거하여 소스 코드로부터 추상 구문 트리(AST, Abstract Syntax Tree)를 구성합니다. 그리고 AST를 다시 분석하여 하위 레벨 코드를 생성합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.