더북(TheBook)

  4. 루트 노드를 생성하는 함수를 만듭니다. 여기서 루트 노드는 회사 CEO를 나타냅니다.

static org_tree create_org_structure(const std::string& pos)
{
    org_tree tree;
    tree.root = new node {pos, NULL, NULL};
    return tree;
}

이 함수는 새로운 트리를 만드는 정적 함수(static function)입니다. 이제 트리 구조를 확장시키는 기능을 추가합시다.

  5. 조직도에서 부하 직원을 추가하는 함수를 만들 것입니다. 이 함수는 상사의 직책 이름과 부하 직원의 직책 이름을 인자로 받으며, 이 중 상사의 직책은 이미 트리에 존재합니다. 그런데 이 함수를 구현하기에 앞서 특정 직책 이름에 해당하는 노드를 찾아서 반환하는 함수를 먼저 만들겠습니다.

static node* find(node* root, const std::string& value)
{
    if (root == NULL)
        return NULL;

    if (root->position == value)
        return root;

    auto firstFound = org_tree::find(root->first, value);

    if (firstFound != NULL)
        return firstFound;

    return org_tree::find(root->second, value);
}

특정 원소를 찾기 위해 트리를 탐색할 때, 해당 원소는 현재 노드이거나 왼쪽 또는 오른쪽 서브 트리(subtree)에 있습니다. 가장 먼저 루트 노드를 검사하고, 만약 찾고자 하는 원소가 아니라면 왼쪽 서브 트리에서 다시 찾으려고 시도합니다. 그래도 해당 원소를 찾지 못하면 오른쪽 서브 트리도 검사합니다.

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