Skip to content

문제 1 · 일반 트리와 이진 트리의 차이

문제 1 [3점]

일반적인 트리tree와 이진 트리binary tree의 차이점을 서술(1점)하고, 두 트리의 노드node 구조를 구현할 때의 차이점을 서술(2점)하시오.

풀이 및 해설

개념적 차이

  • 일반 트리: 각 노드가 가질 수 있는 자식의 수에 제한이 없다(0개부터 여러 개까지). 자식들 사이에 순서가 있을 수도, 없을 수도 있다.
  • 이진 트리: 각 노드가 자식을 최대 2개(왼쪽·오른쪽)만 가지며, 왼쪽·오른쪽이 구별된다. 자식이 하나뿐이어도 그것이 왼쪽인지 오른쪽인지 의미가 있다.
일반 트리: 자식 수 제한 없음이진 트리: 자식 최대 2개(좌·우 구분)

노드 구조 구현의 차이

  • 이진 트리: 자식 수가 최대 2로 고정이므로, 노드에 포인터를 딱 두 개만 둔다.

    cpp
    struct BinNode {
        T data;
        BinNode* left;
        BinNode* right;
    };
  • 일반 트리: 자식 수가 가변이라 포인터를 고정 개수로 둘 수 없다. 두 가지 방법을 쓴다.

    • 자식 리스트: 각 노드가 자식 포인터들의 배열이나 연결 리스트를 가진다.
    • 왼쪽 자식-오른쪽 형제 표현left-child right-sibling: 포인터를 2개만 두되, 하나는 첫째 자식, 다른 하나는 다음 형제를 가리킨다. 이렇게 하면 임의 차수의 일반 트리를 이진 트리 형태로 저장할 수 있다.
    cpp
    struct GenNode {
        T data;
        GenNode* firstChild;   // 첫째 자식
        GenNode* nextSibling;  // 다음 형제
    };

즉 이진 트리는 자식 수가 고정되어 직접 좌·우 포인터로 간단히 구현되지만, 일반 트리는 자식 수가 가변이라 자식 리스트첫 자식-다음 형제 방식으로 우회해 구현한다.

PDF