SELECT n, CASE WHEN P IS NULL THEN 'Root'
WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL)
THEN 'Leaf'
ELSE 'Inner'
END AS NodeType
FROM BST
ORDER BY N;
이 SQL 쿼리는 이진 트리(BST 테이블)의 각 노드 n에 대해 그 노드가 루트(Root), 리프(Leaf), 내부 노드(Inner) 중 무엇인지를 판별하여 NodeType으로 분류합니다.
BST 테이블은 이진 트리 구조를 표현하며 다음과 같은 컬럼을 가짐:
N: 현재 노드의 값
P: 현재 노드의 부모 노드 값 (부모가 없으면 NULL)
WHEN P IS NULL THEN 'Root'
부모 노드가 없다 → 루트 노드
▸ WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
N이 다른 노드의 부모로 등장하지 않으면 → 자식이 없음 → 리프 노드
▸ ELSE 'Inner'
위 두 조건이 아니라면 → 루트도 아니고 리프도 아님 → 내부 노드
WHERE내의 SELELCT 문에서 NULL처리가 킥임!