SQL/문제풀이

[HackerRank] Binary Tree Nodes / JOIN 조건 설정하기 📌

응엉잉 2024. 5. 11. 15:13

https://www.hackerrank.com/challenges/binary-search-tree-1/problem?isFullScreen=true

 

Binary Tree Nodes | HackerRank

Write a query to find the node type of BST ordered by the value of the node.

www.hackerrank.com

 

어려웠던 문제 ...

n은 있는데 p가 null이면 root

n이긴 한데 p이진 않다면 leaf (애 역할은 하는데 부모 역할은 안하는 경우)

나머지는 inner

이렇게 구분해보았다

 

애 역할은 하는데 부모 역할은 하지 않는 경우를 찾기 위해서는 JOIN이 필요했다.

여기서 JOIN 조건을 적어주는게 엄청 헷갈렸다.

SELECT *
FROM bst a
    LEFT JOIN bst b ON a.n = b.p

a의 애 역할을 하는 숫자가 b에서는 부모 역할을 하는 case와 그렇지 않은 case를 동시에 확인해야 했기 때문에 LEFT JOIN 해보았다. (a의 모든 row에 대해 봐야하므로)

그러면 다음과 같은 결과가 나온다.

1, 3, 5, 7은 n이기만 하다. --> leaf

2, 6, 4는 n이면서 p이기도 하다. --> inner

SELECT DISTINCT a.n,
    CASE WHEN a.p IS NULL THEN 'Root'
    WHEN b.n IS NULL THEN 'Leaf'
    ELSE 'Inner' END AS name
FROM bst a
    LEFT JOIN bst b ON a.n = b.p
ORDER BY a.n