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를 다시 분석하여 하위 레벨 코드를 생성합니다.