📝 608. Tree Node
🔹 트리 노드
트리의 각 노드는 세 가지 유형 중 하나일 수 있습니다.
- Leaf: 노드가 리프 노드인 경우.
- Root: 노드가 트리의 루트인 경우.
- Inner: 노드가 리프 노드도 루트 노드도 아닌 경우.
트리의 각 노드 유형을 보고하는 솔루션을 작성하세요.
어떤 순서로든 결과 테이블을 반환합니다.
📝 문제 설명
각 노드를 분석하여 다음 중 어떤 유형인지 판단해야 합니다:
- 부모 노드가 없으면 Root
- 부모 노드가 있고, 다른 노드의 부모로도 쓰이면 Inner
- 부모 노드가 있지만 자식 노드는 없는 경우 Leaf
Tree 테이블의 구조를 기준으로 조건에 맞게 분류하면 됩니다.
📊 테이블 구조
Tree 테이블
Column Name | Type |
id | int |
p_id | int |
💡 SQL 문제 해결 방법
- p_id IS NULL이면 루트 노드 (Root)
- 다른 노드의 부모 ID(p_id)로 사용되고 있으면 내부 노드 (Inner)
- 위 두 조건에 해당하지 않으면 리프 노드 (Leaf)
이를 CASE WHEN 구문을 이용해 분류합니다.
- SELECT DISTINCT p_id FROM Tree로 자식 노드를 갖는 ID들을 찾을 수 있습니다.
- id IN (...) 조건으로 자식이 있는 노드를 판별할 수 있습니다.
728x90
🖥️ SQL 풀이
SELECT id
, CASE WHEN p_id IS NULL THEN 'Root'
WHEN id IN (SELECT DISTINCT p_id FROM Tree WHERE p_id IS NOT NULL) THEN 'Inner'
ELSE 'Leaf'
END AS type
FROM Tree;
🔍 쿼리 분석
- p_id IS NULL: 부모가 없으므로 Root
- id IN (SELECT DISTINCT p_id ...): 자식이 있는 경우 → Inner
- 그 외의 경우는 Leaf로 간주
CASE WHEN으로 세 가지 조건을 나눠서 처리합니다.
📌 실행 예제
📊 입력 데이터
Tree 테이블
id | p_id |
1 | null |
2 | 1 |
3 | 1 |
4 | 2 |
5 | 2 |
쿼리 실행 결과
id | type |
1 | Root |
2 | Inner |
3 | Leaf |
4 | Leaf |
5 | Leaf |
- 1: 부모가 없으므로 Root
- 2: 부모도 있고, 자식도 있으므로 Inner
- 3, 4, 5: 자식이 없으므로 Leaf
🎯 결론
이 문제는 트리 구조를 이해하고 SQL로 분류하는 좋은 연습 문제입니다.
특히 CASE WHEN과 IN (SELECT ...) 문법을 이용한 조건 분기가 핵심입니다.
현업에서도 조직도, 메뉴 트리 등 계층 구조 데이터를 다룰 때 자주 등장하는 패턴이니 꼭 익혀두세요! 😊
더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀
728x90
반응형
'LeetCode' 카테고리의 다른 글
[LeetCode] 1393. Capital Gain/Loss (0) | 2025.04.17 |
---|---|
[LeetCode] 1158. Market Analysis 1 (0) | 2025.04.16 |
[LeetCode] 184. Department Highest Salary (0) | 2025.03.26 |
[LeetCode] 178. Rank Scores (0) | 2025.03.20 |
[LeetCode] 177. Nth Highest Salary (0) | 2025.03.20 |