본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Tree: Lowest Common Ancestor

Binary Search Tree : Lowest Common Ancestor | HackerRank

 

Binary Search Tree : Lowest Common Ancestor | HackerRank

Given two nodes of a binary search tree, find the lowest common ancestor of these two nodes.

www.hackerrank.com

 

<문제>

input: 첫번째 줄에는 tree의 원소 개수를 입력하고, 두번재 줄에는 전체 tree를 크기 순서대로 입력받는다. 마지막 줄에 v1, v2에 저장할 트리 내 두 값을 입력한다. 

output: 입력받은 v1, v2의 공통 ancestor 중에서 가장 아래에 있는 것을 리턴한다.

 

<코드>

struct node *lca( struct node *root, int v1, int v2 ) {
    while (root) {
        if (v1 < root->data && v2 < root->data)
            root = root->left;
        else if (v1 > root->data && v2 > root->data)
            root = root->right;
        else
            return root;
    }     
    return root;
}

<풀이>

먼저 root에 있는 값과 각자 비교해서, v1이랑 v2가 모두 root-> data보다 작으면 모두 root의 왼쪽에 존재하기 때문에 root를 더 낮은 위치에 존재하는 root->left가 가리키는 노드로 옮기게 하였다. 또는 모두 root-> data보다 크면 둘 다 root보다 오른쪽에 위치하니 root->right가 가리키는 노드로 root를 옮긴다. 아닌 경우에 그대로 root를 리턴하면 문제가 풀린다.

 

<실행결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글

[HackerRank] Digit Frequency  (0) 2021.11.21
[HackerRank] Equal Stacks  (0) 2021.11.07
[HackerRank] Printing Tokens  (0) 2021.11.07
[HackerRank] Tree: Inorder Traversal  (0) 2021.10.10
[hackerrank] Students Marks Sum  (0) 2021.10.10