본문 바로가기

[LeetCode] 608. Tree Node

by qwee0328 2025. 4. 16.

📝 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