HackerRank/Oracle Binary Tree Nodes

[HackerRank/Oracle] Binary Tree Nodes

๐Ÿ“Œ๋ฌธ์ œ๋งํฌ ํ’€์ด์ฐธ๊ณ 

*ํ’€์ด ์ฐธ๊ณ  ๋งํฌ์— ๋“ค์–ด๊ฐ€์…”์„œ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ์œ ํ˜•์„ ์ฐพ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

1. Oracle ๋‚ด์žฅํ•จ์ˆ˜

Solution

  1. ๊ณ„์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์˜ START WITH์ ˆ์—์„œ๋Š” ๋ฃจํŠธ๋กœ ์‚ฌ์šฉ๋  ํ–‰์„ ์ •ํ•œ๋‹ค.

    ROOT ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ๊ฐ’์ด NULL์ธ ํ–‰

  2. CONNECT BY PRIOR ์ ˆ์— ์ƒ์œ„๊ณ„์ธต๊ณผ ํ•˜์œ„๊ณ„์ธต์˜ ๊ด€๊ณ„๋ฅผ ๊ทœ์ •ํ•จ

    ์ž์‹์ปฌ๋Ÿผ = ๋ถ€๋ชจ์ปฌ๋Ÿผ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ TOP DOWN ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•จ

  3. LEVEL์€ ๊ณ„์ธต ๊ตฌ์กฐ ์ฟผ๋ฆฌ์—์„œ ์ˆ˜ํ–‰๊ฒฐ๊ณผ์˜ Depth๋ฅผ ํ‘œํ˜„ํ•˜๋Š” Pseudocolumn์ž„

    LEVEL = 1 ์ธ ํ–‰์„ ROOT๋กœ ์ง€์ •

  4. CONNECT_BY_ISLEAF ๋Š” ๊ณ„์ธต๊ตฌ์กฐ ์ฟผ๋ฆฌ์—์„œ ์ตœํ•˜์œ„ ๋ ˆ๋ฒจ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    CONNECT_BY_ISLEAF = 1์ธ ํ–‰์„ LEAF๋กœ ์ง€์ •

1
2
3
4
5
6
7
8
SELECT N,   CASE WHEN LEVEL = 1 THEN 'Root'
            WHEN CONNECT_BY_ISLEAF=1 THEN 'Leaf'
            ELSE 'Inner'
            END
FROM   BST
START WITH P IS NULL
CONNECT BY PRIOR N=P
ORDER BY N;

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