본문 바로가기
SQL

[HackerRank] Binary Tree Nodes 풀이 (Oracle)

by 유림유림 2021. 3. 16.
반응형

문제

Binary Tree Nodes | HackerRank

 

Binary Tree Nodes | HackerRank

Write a query to find the node type of BST ordered by the value of the node.

www.hackerrank.com

BST 테이블은 컬럼 N, P를 갖고 있습니다.

이진 트리 구조이며 N은 노드 값, P는 N의 부모 값입니다.

BST 테이블 정보

이진 트리의 노드 유형을 찾는 쿼리를 작성합니다. 노드 값 순으로 정렬해야 합니다.

각 노드의 유형은 아래와 같이 출력합니다.

  • Root: 최상위 노드인 경우
  • Leaf: 최하위 노드인 경우
  • Inner: 루트 노드도 리프 노드도 아닌 경우

이진 트리 샘플

풀이

계층구조 쿼리의 START WITH 절에서는 루트(부모행)로 사용될 행을 지정합니다.

  • Root 노드는 부모 값(P)이 NULL인 행입니다.

CONNECT BY PRIOR 절에 상위계층(부모행)과 하위계층(자식행)의 관계를 규정합니다.

  • 자식컬럼(N) = 부모컬럼(P)로 지정하여 부모에서 자식으로(Top Down) 트리를 구성합니다.

LEVEL은 계층구조 쿼리에서 수행결과의 Depth를 표현하는 Pseudocolumn입니다.

  • LEVEL 값이 1인 경우를 'Root'로 지정합니다.

CONNECT_BY_ISLEAF는 계층구조 쿼리에서 최하위 레벨(LEAF) 여부를 반환합니다.

  • CONNECT_BY_ISLEAF 값이 1인 경우를 'Leaf'로 지정합니다.
  • 그 외의 경우 'Inner'로 지정합니다.
SELECT N
     , CASE WHEN LEVEL = 1 THEN 'Root'
            WHEN CONNECT_BY_ISLEAF = 1 THEN 'Leaf'
            ELSE 'Inner' END NODE
  FROM BST
 START WITH P IS NULL
 CONNECT BY PRIOR N = P
 ORDER BY 1
;

결과

1 Leaf 
2 Inner 
3 Leaf 
4 Inner 
5 Leaf 
6 Inner 
7 Leaf 
8 Leaf 
9 Inner 
10 Leaf 
11 Inner 
12 Leaf 
13 Inner 
14 Leaf 
15 Root
반응형

댓글