HackerRank SQL) Binary Tree Nodes
문제
Binary Tree Nodes | HackerRank
Code
SELECT CUR.N, CASE
WHEN CUR.P IS NULL THEN 'Root'
WHEN CUR.N IN (SELECT DISTINCT NXT.P
FROM BST AS NXT
WHERE NXT.P IS NOT NULL) THEN 'Inner'
ELSE 'Leaf'
END
FROM BST AS CUR
ORDER BY CUR.N ASC;
설명
SELECT 문에서 CASE ~ WHEN ~ END 구문을 사용하여 'Root', 'Inner', 'Leaf'를 나누었다.
CASE 의 첫 번째 조건은 CUR.P 가 NULL 인지를 확인한다. CUR.P 가 NULL 이라면 Parent Node가 없는 것 이므로 `WHEN CUR.P IS NULL THEN 'Root'` 로 호출하였다.
위 CASE 가 실행이 되지 않았다면 CUR.N 은 Root Node 가 아닌 상태이다. 따라서 'Inner' 인지 'Leaf'인지를 판별해야 한다. 현재 CUR.N 을 Parent Node 로 가지는 Node 가 있다면 CUR.N 은 'Inner' 이고, 없다면 'Leaf' 이다. 따라서 서브 쿼리로 어떠한 Node의 Parent Node 가 되는 Node들을 출력한 뒤 CUR.N 이 이 서브 쿼리에 포함이 되냐 안 되느냐에 따라 'Inner', 'Leaf' 로 나누었다.
728x90
댓글