[HackerRank/Oracle] Binary Tree Nodes
*ํ์ด ์ฐธ๊ณ ๋งํฌ์ ๋ค์ด๊ฐ์ ์ ๋ณด์๋ฉด ๋ฉ๋๋ค.
์ด์ง ํธ๋ฆฌ์ ๋ ธ๋ ์ ํ์ ์ฐพ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฌธ์ ๋ค.
1. Oracle ๋ด์ฅํจ์
Solution
-
๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์ START WITH์ ์์๋ ๋ฃจํธ๋ก ์ฌ์ฉ๋ ํ์ ์ ํ๋ค.
ROOT ๋ ธ๋๋ ๋ถ๋ชจ๊ฐ์ด NULL์ธ ํ -
CONNECT BY PRIOR ์ ์ ์์๊ณ์ธต๊ณผ ํ์๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๊ท์ ํจ
์์์ปฌ๋ผ = ๋ถ๋ชจ์ปฌ๋ผ ์ผ๋ก ์ง์ ํ์ฌ ๋ถ๋ชจ์์ ์์์ผ๋ก TOP DOWN ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํจ -
LEVEL์ ๊ณ์ธต ๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ ์ํ๊ฒฐ๊ณผ์ Depth๋ฅผ ํํํ๋ Pseudocolumn์
LEVEL = 1 ์ธ ํ์ ROOT๋ก ์ง์ -
CONNECT_BY_ISLEAF ๋ ๊ณ์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์์ ์ตํ์ ๋ ๋ฒจ ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ค.
CONNECT_BY_ISLEAF = 1์ธ ํ์ LEAF๋ก ์ง์
1 | |
2. ๋ค๋ฅธ ํ์ด
LEAF๋ ๋ถ๋ชจ์ ์ํ์ง ์๋ ํน์ง์ ์ด์ฉํด์ ์๋์ ๊ฐ์ด ํ ์์๋ค.
SELECT N, CASE WHEN N NOT IN (SELECT DISTINCT P FROM BST WHERE P IS NOT NULL) THEN 'Leaf'
WHEN P IS NULL THEN 'Root'
ELSE 'Inner'
END
FROM BST
ORDER BY N;
3. ๊ฒฐ๊ณผ
S1 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