SQL 이진트리 노드 분류

Minsu Kang·2025년 4월 4일
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)

Case 분석

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처리가 킥임!

profile
안녕하세요! 강민수입니다.

0개의 댓글