-
1. ์ด์ง ํธ๋ฆฌ(Binary Tree)๋?
-
2. ์ด์ง ํ์(Binary Search)์ด๋? ๐
-
3. ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)๋?
-
4. ์ํ๋?
-
5. ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌ์ถํ๊ธฐ
-
6. ์ด์ง ํ์ ํธ๋ฆฌ ํ์ํ๊ธฐ
-
7. ์ด์ง ํ์ ํธ๋ฆฌ VS ๋ฐฐ์ด ๋น๊ต
-
8. ์์ ๋ฌธ์ (ํธ๋ฆฌ ์ํ)
-
๐ 8-1. ๋ฌธ์ ์ค๋ช
-
๐ก 8-2. ํ์ด ๊ณผ์ & ์ ๋ต ์ฝ๋
-
9. ์ฐธ๊ณ ์๋ฃ & ํฌ์คํ ์์ฑ์ ๋์์ ์ฃผ์ ๋ธ๋ก๊ทธ
์ด์งํธ๋ฆฌ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฐ๋ก ํ์์ ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฑฐ์ผ. ๋ฌผ๊ฑด์ ์ ์ ๋ฆฌํด ๋๋ฉด ์ฐพ์ ์ ์๋ ๊ฒ๊ณผ ๋๊ฐ์. ์ด์งํธ๋ฆฌ๋ ์์ ๋
ธ๋๊ฐ ์ต๋ 2๊ฐ์ธ ํธ๋ฆฌ๋ฅผ ๋งํด. ๊ทธ๋ฆฌ๊ณ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ข
๋ฅ๊ฐ ์์ด. ํ์ง๋ง ์ฌ๊ธฐ์๋ ์ด์งํ์ํธ๋ฆฌ(binary search tree)๋ฅผ ๋ง๋ค์ด์ ์ด๊ฑธ ํ์ฉํด์ ์ํ๋ ๋
ธ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์์ ๋ณด๋๋ก ํ์.
1. ์ด์ง ํธ๋ฆฌ(Binary Tree)๋?
์ด์ง ํธ๋ฆฌ๋ ๊ฐ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋
ธ๋(์ผ์ชฝ, ์ค๋ฅธ์ชฝ)๋ฅผ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ผ.
์ฝ๊ฒ ๋งํด์, ๋ถ๋ชจ ๋
ธ๋๊ฐ ์์ ๋
ธ๋๋ฅผ 0๊ฐ, 1๊ฐ, ๋๋ 2๊ฐ๊น์ง๋ง ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ์ผ.

์ ํธ๋ฆฌ์์ ๊ฐ ๋
ธ๋๋ ์ต๋ ๋ ๊ฐ์ ์์์ ๊ฐ์ง๊ณ ์์ด.
์ด์ง ํธ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง๋ก ํ์ฉ๋์ง๋ง, ํ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
2. ์ด์ง ํ์(Binary Search)์ด๋? ๐
์ด์ง ํ์(Binary Search)์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ ํธ๋ฆฌ์์ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐฉ๋ฒ์ด์ผ
ํ์ํ ๋ ์ค๊ฐ๊ฐ๊ณผ ๋น๊ตํ๋ฉด์ ๊ฒ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ฐฉ์์ ์ฌ์ฉํด
โ ์ด์ง ํ์ ๊ณผ์ (์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ ๋ฐฐ์ด ๊ธฐ์ค)
- ์ค๊ฐ๊ฐ์ ์ ํํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ ์ ๋ฐ์์ ํ์ํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ฐ์์ ํ์ํ๋ค.
- ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ๊ฑฐ๋, ๊ฐ์ด ์์ผ๋ฉด ํ์์ ์ข ๋ฃํ๋ค.
โ ์ด์ง ํ์ ์์
์ ๋ ฌ๋ ๋ฐฐ์ด [1, 3, 5, 7, 9, 11, 13]์์ 9๋ฅผ ์ฐพ๊ธฐ
- ์ค๊ฐ๊ฐ = 7 โ 9 > 7์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ([9, 11, 13])์์ ํ์
- ์ค๊ฐ๊ฐ = 11 โ 9 < 11์ด๋ฏ๋ก ์ผ์ชฝ([9])์์ ํ์
- ์ค๊ฐ๊ฐ = 9 โ ์ฐพ์
- ์๊ฐ ๋ณต์ก๋: O(log n) (ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ด๋ฏ๋ก ๋น ๋ฆ!)
3. ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)๋?
์ด์ง ํ์ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์ ํ ์ข ๋ฅ๋ก, ์ด์ง ํ์์ ์๋ฆฌ๋ฅผ ์ ์ฉํ ํธ๋ฆฌ์ผ
์ค์ฌ์ BST ์ด๋ผ๊ณ ํด.
โ
BST์ ํน์ง
- ์ผ์ชฝ ์์ ๋ ธ๋ < ๋ถ๋ชจ ๋ ธ๋ < ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋
- ์ค๋ณต๋ ๊ฐ ์์
- ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์ด ๋น ๋ฆ (O(log n))

- 10์ ์ผ์ชฝ์๋ 5(์์ ๊ฐ), ์ค๋ฅธ์ชฝ์๋ 15(ํฐ ๊ฐ)
- 5์ ์ผ์ชฝ์๋ 2(๋ ์์ ๊ฐ), ์ค๋ฅธ์ชฝ์๋ 7(๋ ํฐ ๊ฐ)
- 15์ ์ผ์ชฝ์๋ 12, ์ค๋ฅธ์ชฝ์๋ 20
๐ก ๋ ธ๋๊ฐ ๋ญ์ผ?
๋ ธ๋(node)๋ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํ๋์ ์์๋ฅผ ์๋ฏธํด. ์ฝ๊ฒ ๋งํด์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ํ๋์ ์์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ผ.
์ด์งํธ๋ฆฌ์์๋ ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ด. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๋ ธ๋๋ ๋ถ๋ชจ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์๋ ์๊ณ , ์ฐ๊ฒฐ๋์ง ์์ ์๋ ์์ด.
โ ๋
ธ๋๊ฐ ๋ด๊ณ ์๋ ์ ๋ณด๋ค
- ๊ฐ(value): ๋ ธ๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ
- ์ผ์ชฝ ์์(left child): ํ์ฌ ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง ๋ ธ๋
- ์ค๋ฅธ์ชฝ ์์(right child): ํ์ฌ ๋ ธ๋๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง ๋ ธ๋
- ๋ถ๋ชจ(parent): ํ์ฌ ๋ ธ๋๋ฅผ ํฌํจํ๋ ์์ ๋ ธ๋ (๋ฃจํธ ๋ ธ๋๋ ๋ถ๋ชจ๊ฐ ์์)
์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)์์๋ ์ผ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ํฌ๋ค๋ ๊ท์น์ด ์์ด. ์ด ๊ท์น์ ์ด์ฉํ๋ฉด ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์์ด
๐ก ๋
ธ๋๋ฅผ ์๋ ์ = ๊ฐ์ (Edge)
์ด์ง ํธ๋ฆฌ์์ ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ "๊ฐ์ (Edge)"์ด๋ผ๊ณ ํด. ๊ฐ์ ์ ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ ์ค์ํ ์์์ผ. ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ฉฐ, ๊ฐ์ ์ ๊ฐ์๋ฅผ ๋ณด๋ฉด ํธ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ฝ๊ฒ ์ ์ ์์ด.
โ ๊ฐ์ (Edge)์ ํน์ง
- ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์
- ๋ ธ๋ ๊ฐ์๊ฐ N๊ฐ๋ผ๋ฉด, ๊ฐ์ ๊ฐ์๋ N-1๊ฐ
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ๋ฐ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฏ๋ก, N-1๊ฐ์ ๊ฐ์ ์ด ํ์ํด
4. ์ํ๋?
์ด์ง ํธ๋ฆฌ์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์๋ฅผ ์ ์ํ๋ ํธ๋ฆฌ ์ํ(traversal) ๋ฐฉ๋ฒ์ ๋ํด ์ ๊น ์์ ๋ณด๊ณ ๊ฐ์.
๊ฐ ์ํ ๋ฐฉ์์ ๋
ธ๋์ ๋ฃจํธ(root)์ ์์ ๋
ธ๋(left, right)๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์์ ๋ฐ๋ผ ๊ตฌ๋ถ๋ผ
ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋ ์ธ ๊ฐ์ง๊ฐ ์๋๋ฐ ๋ชจ๋ ๊น์ด ์ฐ์ ํ์(Depth-First Search, DFS)์ ์ผ์ข
์ด์ผ.
DFS๋ ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ํ ๊ฒฝ๋ก๋ฅผ ๋๊น์ง ํ์ํ ํ, ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ๋ฐฉ์์ ํ์ ๋ฐฉ๋ฒ์ธ๋ฐ, ํธ๋ฆฌ์ ์ํ ๋ฐฉ์์ DFS์ ํ ํํ๋ก ๋ณด๋ ์ด์ ๋ ํธ๋ฆฌ๋ฅผ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊น์ด ๋ค์ด๊ฐ๋ฉฐ ์ํํ๊ธฐ ๋๋ฌธ์ด์ผ.
- ์ ์ ์ํ(Preorder Traversal)
- ์ค์ ์ํ(Inorder Traversal)
- ํ์ ์ํ(Postorder Traversal)
๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.

์ ์ ์ํ
์ ์ ์ํ์์๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด
[๋ฐฉ๋ฌธ์์]
๋ฃจํธ โ ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ
์ ์ ์ํ ๊ฒฐ๊ณผ: A โ B โ D โ E โ C โ F
์ค์ ์ํ
์ค์ ์ํ์์๋ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด. ์ค์ ์ํ๋ ์ด์ง ํ์ ํธ๋ฆฌ์์ ๋ ธ๋๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์์๋ก๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด์ผ.
[๋ฐฉ๋ฌธ์์]
์ผ์ชฝ โ ๋ฃจํธ โ ์ค๋ฅธ์ชฝ
์ค์ ์ํ ๊ฒฐ๊ณผ: D โ B โ E โ A โ C โ F.
ํ์ ์ํ
ํ์ ์ํ์์๋ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด. ํ์ ์ํ๋ ํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋, ํน์ ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ํ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด์ผ.
[๋ฐฉ๋ฌธ์์]
์ผ์ชฝ โ ์ค๋ฅธ์ชฝ โ ๋ฃจํธ
ํ์ ์ํ ๊ฒฐ๊ณผ: D โ E โ B โ F โ C โ A
5. ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌ์ถํ๊ธฐ
์ด์ง ํ์ ํธ๋ฆฌ์ ๋์ ๋ฐ์ดํฐ๊ฐ 3 โ 4 โ 2 โ 8 โ 9 โ 7 โ 1 ์์๋ก ๋ค์ด์จ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ์๋ฆฌ์ ๋ํด์ ์ค๋ช ํด ๋ณผ๊ฒ.
์ด์ง ํ์ ํธ๋ฆฌ๋ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๋ฐ์ ธ์ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ์ผ์ชฝ ์์ ์์น์, ํฌ๊ธฐ๊ฐ ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํ๋ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ด.
์๋์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ฝ์
ํ ์ ๋ ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฝ์
ํ๋ฉด์ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฑธ ๋ณผ ์ ์์ด. ์ฆ, ์ฝ์
๊ณผ ๋์์ ์ ๋ ฌ์ ํด.

1๋จ๊ณ
์ต์ด์ ๋ฐ์ดํฐ๋ ๋ฃจํธ ๋
ธ๋๊ฐ ๋ผ. 3์ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฃจํธ ๋
ธ๋๋ก ์ถ๊ฐํด.
2๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 4์ผ. 4๋ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
3๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 2์ผ. 2๋ 3๋ณด๋ค ์์ผ๋๊น ์ผ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
4๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 8์ด์ผ. 8์ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น๋ฅผ ๋ด์ผ ํด. ์ด๋ฏธ ์์์ด ์๋ ๊ฒฝ์ฐ ๊ฐ์ ๋น๊ตํด. 8์ 4๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น๋ฅผ ๋ด. 4์ ์ค๋ฅธ์ชฝ ์์ ์์น๊ฐ ๋น์ด ์์ผ๋๊น ์ด ์๋ฆฌ์ 8์ ๋ฐฐ์นํด. ์ด๋ฐ ์์ผ๋ก ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ๋๋ ๋ฃ์ผ๋ ค๋ ๋์ ๋ฐ์ดํฐ์ ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค๋ฅธ์ชฝ ์์์ผ๋ก, ์์ผ๋ฉด ์ผ์ชฝ ์์์ผ๋ก ๋ฐฐ์นํด.
5๋จ๊ณ
9๋ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ์ ๋ด. 4๋ณด๋ค ํฌ๊ณ 8๋ณด๋ค ํฌ๋๊น 8์ ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
6๋จ๊ณ
7์ 3๋ณด๋ค ํฌ๊ณ , 4๋ณด๋ค ํฌ๊ณ , 8๋ณด๋ค๋ ์์ผ๋๊น 8์ ์ผ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
7๋จ๊ณ
1์ 3๋ณด๋ค ์๊ณ , 2๋ณด๋ค ์์ผ๋ 2์ ์ผ์ชฝ ์์ ์๋ฆฌ์ ๋ฐฐ์นํด
6. ์ด์ง ํ์ ํธ๋ฆฌ ํ์ํ๊ธฐ
์ด์ ์ด์ง ํ์ํธ๋ฆฌ๊ฐ ๋ฐฐ์ด๋ณด๋ค ์ข์ ์ ์ ๋ณด์ฌ์ค๊ฒ. ์ด์ง ํธ๋ฆฌ ํ์ํ๋ ๋ฒ์ ์๋์ ๊ฐ์
- ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ํ์ฌ ๋ ธ๋์ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ํ์์ ์ข ๋ฃํ๊ณ ํฌ๋ฉด ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ํ์ํด
- ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ํ์ฌ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ ๋ ธ๋๋ฅผ ํ์ํด
- ๊ฐ์ ์ฐพ์ผ๋ฉด ์ข ๋ฃํด. ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๊ณ์ ํ์ํ๋๋ฐ ๊ฐ์ด ์์ผ๋ฉด ํ์ฌ ํธ๋ฆฌ์ ๊ฐ์ด ์๋ค๊ณ ๊ฐ์ฃผํด

์์ ๊ฐ์ ๊ฒ์ ๋์ ํธ๋ฆฌ์์ 5๋ฅผ ์ฐพ์๋ณด์.
3๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์ฐ์ ์ค๋ฅธ์ชฝ์ ๋ณธ๋ค. 6๋ณด๋ค๋ ์์ผ๋ ์ผ์ชฝ์ ๋ณธ๋ค. ์ผ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ํน์ง์ ๋ฐ๋ฅด๋ฉด ์ด์ 5๊ฐ ์๋ค๋ ๊ฑธ ์๊ธฐ ๋๋ฌธ์ ์ด ํธ๋ฆฌ์๋ 5๊ฐ ์๋ค๋ ๊ฑธ 2๋ฒ๋ง์ ํ์์ผ๋ก ํ๋จ๊ฐ๋ฅํด.
๋ง์ฝ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด ํ์์ ์งํํ๋ค๋ฉด ์์ฐจ์ ์ผ๋ก 5๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ 7๋ฒ์ ๋น๊ต ์ฐ์ฐ์ ์ํํด์ผ ํด. ๊ทธ์ ๋ฐํด ์ด์งํธ๋ฆฌ๋ 2๋ฒ๋ง ๋น๊ต ์ฐ์ฐ์ ์งํํ๊ฒ ๋ผ. ๋ฐ๋ผ์ ๋ฐฐ์ด ํ์๋ณด๋ค ์ด์ง ํ์ ํธ๋ฆฌ์ ํ์์ด ํจ์ฌ ๋น ๋ฅด๋ค.
7. ์ด์ง ํ์ ํธ๋ฆฌ VS ๋ฐฐ์ด ๋น๊ต
์ง๊ธ๊น์ง์ ์ค๋ช
์ ๋ค์ผ๋ฉด '์ด์ง ํ์ ํธ๋ฆฌ์์ ํ์ํ๋ ๊ฒ์ด ๋ฐฐ์ด์์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ด ์ข์ ๊ฒ ๊ฐ๋ค!'๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋์ด ์์ ์ ์๋ค. ํ์ง๋ง ๋ ์๋ฃ๊ตฌ์ฃ ์ ์ฝ์
๊ณผ ํ์ ์๊ฐ ๋ณต์ก๋๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ท ํ์ด ๋ง์ง ์๋๋ค๋ฉด ์ต์
์ ํ์ฐ O(N)์ด ๋์ด ๋น์ทํ ํจ์จ์ ๋ธ๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ ๋ณต์ก๋๋ ํธ๋ฆฌ ๊ท ํ์ ์์กดํ๋ค. ํธ๋ฆฌ์ ๊ท ํ์ด ์กํ๋ค๋ ๊ฑด ๊ฐ ๋
ธ๋์ ์ฐจ์๊ฐ ๋น์ทํ๊ฒ ์ ์ง๋๋ฉด์ ๊ฐ ๋
ธ๋์ ์์ ๋
ธ๋ ์๊ฐ ๋น์ทํ๊ฒ ์ ์ง๋๋ ๊ฑธ ๋งํ๋ค. ๊ท ํ์ด ์ ์ง๋์๋ค๊ณ ๊ฐ์ ํ์ ๋ ์ฝ์
๊ณผ ํ์ ์ฐ์ฐ ์ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ ์ฅ๋ ๋
ธ๋๊ฐ N๊ฐ๋ผ๊ณ ํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(logN)์ด๋ค. ํ์ง๋ง ๊ท ํ์ด ๋ง์ง ์์ ๋๋ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐฐ์ด๊ณผ ๋น์ทํ๋ค.
* ๊ท ํ์ด ์กํ ์๋ค๋ ๊ฑด ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋์ด ์ฐจ๊ฐ 1 ์ดํ์ธ ๊ฒฝ์ฐ์ด๋ค. ๊ทธ๋ ์ง ์์ ๋๋ ๊ท ํ์ด ์กํ ์์ง ์๋ค๋ผ๊ณ ํ๋ค. ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ์ด์ง ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ ํ์๊ฐ ํธ๋ฆฌ ๋์ด์ ๋น๋กํ๊ณ ํธ๋ฆฌ์ ๋์ด๋ logN์ด๋ฏ๋ก ํ์ ์๊ฐ ๋ณต์ก๋๋ฅผ O(logN)์ผ๋ก ์ ์งํ ์ ์๋ค. ํ์ง๋ง ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฑด ๋์ด๋๊ฐ ๋๋ฌด ๋๊ธฐ ๋๋ฌธ์ ์ฝํ
์๋ ๊ฑฐ์ ๋์ค์ง ์๋๋ค.
8. ์์ ๋ฌธ์ (ํธ๋ฆฌ ์ํ)
๐ 8-1. ๋ฌธ์ ์ค๋ช
์ด์ง ํธ๋ฆฌ๋ฅผ ํํํ ๋ฆฌ์คํธ nodes๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด์ nodes๊ฐ [1, 2, 3, 4, 5, 6, 7]์ด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ๋ฅผ ํํํ ๊ฒ์
๋๋ค. ํด๋น ์ด์ง ํธ๋ฆฌ์ ๋ํ์ฌ ์ ์ ์ํ, ์ค์ ์ํ, ํ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ solution() ํจ์๋ฅผ ๊ตฌํํ์ธ์
์ ์ฝ์กฐ๊ฑด
- ์ ๋ ฅ ๋ ธ๋๊ฐ์ ๊ฐ์๋ 1๊ฐ ์ด์ 1,000๊ฐ ์ดํ์ด๋ค.
- ๋ ธ๋๊ฐ์ ์ ์ํ์ด๋ฉฐ, ์ค๋ณต๋์ง ์๋๋ค.
์ ์ถ๋ ฅ ์
nodes | return |
[1, 2, 3, 4, 5, 6, 7] | ["1 2 3 4 5 6 7", "4 2 5 1 6 3 7", "4 5 2 6 7 3 1"] |
๐ก 8-2. ํ์ด ๊ณผ์ & ์ ๋ต ์ฝ๋
๋ฌธ์ ๊ทธ๋๋ก ์ ์, ์ค์, ํ์ ์ํ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
๐ ํธ๋ฆฌ ์ํ ๋ฐฉ์์?
- ์ ์ ์ํ(Preorder): Root โ Left โ Right
- ์ค์ ์ํ(Inorder): Left โ Root โ Right
- ํ์ ์ํ(Postorder): Left โ Right โ Root
[์ ๋ต ์ฝ๋1]
import java.util.*;
class Solution {
public static List<List<Integer>> solution(int[] nodes) {
List<Integer> preorderList = new ArrayList<>();
List<Integer> inorderList = new ArrayList<>();
List<Integer> postorderList = new ArrayList<>();
traverse(nodes, 0, preorderList, inorderList, postorderList);
return Arrays.asList(preorderList, inorderList, postorderList);
}
private static void traverse(int[] nodes, int index,
List<Integer> preorder,
List<Integer> inorder,
List<Integer> postorder) {
if (index >= nodes.length) return;
preorder.add(nodes[index]); // ์ ์ ์ํ (Preorder): Root โ Left โ Right
traverse(nodes, 2 * index + 1, preorder, inorder, postorder); // Left
inorder.add(nodes[index]); // ์ค์ ์ํ (Inorder): Left โ Root โ Right
traverse(nodes, 2 * index + 2, preorder, inorder, postorder); // Right
postorder.add(nodes[index]); // ํ์ ์ํ (Postorder): Left โ Right โ Root
}
public static void main(String[] args) {
int[] nodes = {1, 2, 3, 4, 5, 6, 7};
List<List<Integer>> result = solution(nodes);
System.out.println("์ ์ ์ํ: " + result.get(0));
System.out.println("์ค์ ์ํ: " + result.get(1));
System.out.println("ํ์ ์ํ: " + result.get(2));
}
}
solution ํจ์
- preorderList, inorderList, postorderList๋ฅผ ์์ฑํ๊ธฐ
- traverse() ํจ์๋ฅผ ํธ์ถํ์ฌ ํธ๋ฆฌ ํ์
- ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ ๋ฐฐ์ด ํํ๋ก ๋ฐํ
traverse() ํจ์ (์ฌ๊ทํจ์)
- ํ์ฌ ๋ ธ๋์ index๊ฐ nodes.length๋ฅผ ์ด๊ณผํ๋ฉด ์ข ๋ฃ
- ์ ์ ์ํ: ํ์ฌ ๋
ธ๋๋ฅผ ๋จผ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ: 2 * index + 1 - ์ค์ ์ํ: ์ผ์ชฝ ํ์ ํ ํ์ฌ ๋
ธ๋ ์ถ๊ฐ
์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ: 2 * index + 2 - ํ์ ์ํ: ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ํ์ ํ ํ์ฌ ๋ ธ๋ ์ถ๊ฐ
[์ ๋ต ์ฝ๋2]
import java.util.*;
class Solution {
public static List<String> solution(int[] nodes) {
String pre = preorder(nodes, 0).trim();
String in = inorder(nodes, 0).trim();
String post = postorder(nodes, 0).trim();
return Arrays.asList(pre, in, post);
}
private static String preorder(int[] nodes, int idx) {
if (idx >= nodes.length) return "";
return nodes[idx] + " " + preorder(nodes, 2 * idx + 1) + preorder(nodes, 2 * idx + 2);
}
private static String inorder(int[] nodes, int idx) {
if (idx >= nodes.length) return "";
return inorder(nodes, 2 * idx + 1) + nodes[idx] + " " + inorder(nodes, 2 * idx + 2);
}
private static String postorder(int[] nodes, int idx) {
if (idx >= nodes.length) return "";
return postorder(nodes, 2 * idx + 1) + postorder(nodes, 2 * idx + 2) + nodes[idx] + " ";
}
public static void main(String[] args) {
int[] nodes = {1, 2, 3, 4, 5, 6, 7};
List<String> result = solution(nodes);
System.out.println("์ ์ ์ํ: " + result.get(0));
System.out.println("์ค์ ์ํ: " + result.get(1));
System.out.println("ํ์ ์ํ: " + result.get(2));
}
}
๋ฌธ์ ์์ nodes๋ ๋
ธ๋ ๋ฆฌ์คํธ๋ฅผ ์๋ฏธํ๊ณ solution() ๋ฉ์๋์์๋ ๋ฆฌ์คํธ์ ๋ฃจํธ ๋
ธ๋์ ์ธ๋ฑ์ค๋ฅผ preorder(), inorder(), postorder() ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌํด์ ์ ์ ์ํ, ์ค์ ์ํ, ํ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ฐ ๊ณ์ฐํ๊ณ ์ด๊ฑธ ๋ฆฌ์คํธ๋ก ๋ฐํํ๋ค.
๊ฐ ๋ฉ์๋์์๋
- idx๊ฐ ๋ ธ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค ์์ ๋๋ง ์ฌ๊ท ํธ์ถํ๋ค.
- idx๊ฐ ๋ ธ๋ ๋ฐฐ์ด์ ๊ธธ์ด์ ๊ฐ๊ฑฐ๋ ํฌ๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
- ๋ฐํ๋ ๊ฒฐ๊ณผ ๋ฌธ์์ด์์๋ ๋ง์ง๋ง ๊ณต๋ฐฑ์ ์ ๊ฑฐํ ๋ค์ ๋ฐํํ๋ค.
9. ์ฐธ๊ณ ์๋ฃ & ํฌ์คํ ์์ฑ์ ๋์์ ์ฃผ์ ๋ธ๋ก๊ทธ
1. ๊ถ๊ธํ ์ ์ chatGPT์ ๋ฌผ์ด๋ณด๋ฉด์ ์์ฑํจ https://chatgpt.com/
2. ๊นํฌ์ฑ. ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณต 97๋ฌธ์ ๋ก ์๋ฒฝ ๋๋น ์ฝ๋ฉ ํ
์คํธ ํฉ๊ฒฉ์ ๋๊ธฐ: ์๋ฐ ํธ. ํ๋น๋ฏธ๋์ด, 2023.
3. [ํ๋ก๊ทธ๋๋จธ์ค] ๊ธธ์ฐพ๊ธฐ ๊ฒ์ => ์ด์ง ํธ๋ฆฌ์ DFS๋ฅผ ํตํ ์ํ ๋ฐฉ์ ์ ๋ฆฌ ์ค ํธ๋ฆฌ ์ํ ๋ถ๋ถ ๋ฐ์ท
https://velog.io/@sperr/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B8%EC%B0%BE%EA%B8%B0-%EA%B2%8C%EC%9E%84-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%AC%EC%99%80-DFS%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%88%9C%ED%9A%8C-%EB%B0%A9%EC%8B%9D-%EC%A0%95%EB%A6%AC
'Algorithm > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ฆผ์ผ๋ก ์ฝ๊ฒ ์ดํดํ๋ ์๋ฐ์ Queue (ํ) (8) | 2025.02.21 |
---|
์ด์งํธ๋ฆฌ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฐ๋ก ํ์์ ํจ์จ์ ์ผ๋ก ํ ์ ์๋๋ก ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฑฐ์ผ. ๋ฌผ๊ฑด์ ์ ์ ๋ฆฌํด ๋๋ฉด ์ฐพ์ ์ ์๋ ๊ฒ๊ณผ ๋๊ฐ์. ์ด์งํธ๋ฆฌ๋ ์์ ๋
ธ๋๊ฐ ์ต๋ 2๊ฐ์ธ ํธ๋ฆฌ๋ฅผ ๋งํด. ๊ทธ๋ฆฌ๊ณ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฌ๋ฌ ์ข
๋ฅ๊ฐ ์์ด. ํ์ง๋ง ์ฌ๊ธฐ์๋ ์ด์งํ์ํธ๋ฆฌ(binary search tree)๋ฅผ ๋ง๋ค์ด์ ์ด๊ฑธ ํ์ฉํด์ ์ํ๋ ๋
ธ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ์์ ๋ณด๋๋ก ํ์.
1. ์ด์ง ํธ๋ฆฌ(Binary Tree)๋?
์ด์ง ํธ๋ฆฌ๋ ๊ฐ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋
ธ๋(์ผ์ชฝ, ์ค๋ฅธ์ชฝ)๋ฅผ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ผ.
์ฝ๊ฒ ๋งํด์, ๋ถ๋ชจ ๋
ธ๋๊ฐ ์์ ๋
ธ๋๋ฅผ 0๊ฐ, 1๊ฐ, ๋๋ 2๊ฐ๊น์ง๋ง ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ์ผ.

์ ํธ๋ฆฌ์์ ๊ฐ ๋
ธ๋๋ ์ต๋ ๋ ๊ฐ์ ์์์ ๊ฐ์ง๊ณ ์์ด.
์ด์ง ํธ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง๋ก ํ์ฉ๋์ง๋ง, ํ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
2. ์ด์ง ํ์(Binary Search)์ด๋? ๐
์ด์ง ํ์(Binary Search)์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ ํธ๋ฆฌ์์ ์ํ๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐฉ๋ฒ์ด์ผ
ํ์ํ ๋ ์ค๊ฐ๊ฐ๊ณผ ๋น๊ตํ๋ฉด์ ๊ฒ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ฐฉ์์ ์ฌ์ฉํด
โ ์ด์ง ํ์ ๊ณผ์ (์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ ๋ฐฐ์ด ๊ธฐ์ค)
- ์ค๊ฐ๊ฐ์ ์ ํํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ ์ ๋ฐ์์ ํ์ํ๋ค.
- ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ฐ์์ ํ์ํ๋ค.
- ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ๊ฐ์ ์ฐพ๊ฑฐ๋, ๊ฐ์ด ์์ผ๋ฉด ํ์์ ์ข ๋ฃํ๋ค.
โ ์ด์ง ํ์ ์์
์ ๋ ฌ๋ ๋ฐฐ์ด [1, 3, 5, 7, 9, 11, 13]์์ 9๋ฅผ ์ฐพ๊ธฐ
- ์ค๊ฐ๊ฐ = 7 โ 9 > 7์ด๋ฏ๋ก ์ค๋ฅธ์ชฝ([9, 11, 13])์์ ํ์
- ์ค๊ฐ๊ฐ = 11 โ 9 < 11์ด๋ฏ๋ก ์ผ์ชฝ([9])์์ ํ์
- ์ค๊ฐ๊ฐ = 9 โ ์ฐพ์
- ์๊ฐ ๋ณต์ก๋: O(log n) (ํ์ ๋ฒ์๋ฅผ ์ ๋ฐ์ฉ ์ค์ด๋ฏ๋ก ๋น ๋ฆ!)
3. ์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)๋?
์ด์ง ํ์ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์ ํ ์ข ๋ฅ๋ก, ์ด์ง ํ์์ ์๋ฆฌ๋ฅผ ์ ์ฉํ ํธ๋ฆฌ์ผ
์ค์ฌ์ BST ์ด๋ผ๊ณ ํด.
โ
BST์ ํน์ง
- ์ผ์ชฝ ์์ ๋ ธ๋ < ๋ถ๋ชจ ๋ ธ๋ < ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋
- ์ค๋ณต๋ ๊ฐ ์์
- ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์ด ๋น ๋ฆ (O(log n))

- 10์ ์ผ์ชฝ์๋ 5(์์ ๊ฐ), ์ค๋ฅธ์ชฝ์๋ 15(ํฐ ๊ฐ)
- 5์ ์ผ์ชฝ์๋ 2(๋ ์์ ๊ฐ), ์ค๋ฅธ์ชฝ์๋ 7(๋ ํฐ ๊ฐ)
- 15์ ์ผ์ชฝ์๋ 12, ์ค๋ฅธ์ชฝ์๋ 20
๐ก ๋ ธ๋๊ฐ ๋ญ์ผ?
๋ ธ๋(node)๋ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํ๋์ ์์๋ฅผ ์๋ฏธํด. ์ฝ๊ฒ ๋งํด์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ํ๋์ ์์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ผ.
์ด์งํธ๋ฆฌ์์๋ ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ด. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ์ ๋ ธ๋๋ ๋ถ๋ชจ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์๋ ์๊ณ , ์ฐ๊ฒฐ๋์ง ์์ ์๋ ์์ด.
โ ๋
ธ๋๊ฐ ๋ด๊ณ ์๋ ์ ๋ณด๋ค
- ๊ฐ(value): ๋ ธ๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ
- ์ผ์ชฝ ์์(left child): ํ์ฌ ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง ๋ ธ๋
- ์ค๋ฅธ์ชฝ ์์(right child): ํ์ฌ ๋ ธ๋๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง ๋ ธ๋
- ๋ถ๋ชจ(parent): ํ์ฌ ๋ ธ๋๋ฅผ ํฌํจํ๋ ์์ ๋ ธ๋ (๋ฃจํธ ๋ ธ๋๋ ๋ถ๋ชจ๊ฐ ์์)
์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree, BST)์์๋ ์ผ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ํฌ๋ค๋ ๊ท์น์ด ์์ด. ์ด ๊ท์น์ ์ด์ฉํ๋ฉด ๋น ๋ฅด๊ฒ ์ํ๋ ๊ฐ์ ์ฐพ์ ์ ์์ด
๐ก ๋
ธ๋๋ฅผ ์๋ ์ = ๊ฐ์ (Edge)
์ด์ง ํธ๋ฆฌ์์ ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ "๊ฐ์ (Edge)"์ด๋ผ๊ณ ํด. ๊ฐ์ ์ ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๋ ์ค์ํ ์์์ผ. ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ฉฐ, ๊ฐ์ ์ ๊ฐ์๋ฅผ ๋ณด๋ฉด ํธ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ฝ๊ฒ ์ ์ ์์ด.
โ ๊ฐ์ (Edge)์ ํน์ง
- ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์
- ๋ ธ๋ ๊ฐ์๊ฐ N๊ฐ๋ผ๋ฉด, ๊ฐ์ ๊ฐ์๋ N-1๊ฐ
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ ๋ฐ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฏ๋ก, N-1๊ฐ์ ๊ฐ์ ์ด ํ์ํด
4. ์ํ๋?
์ด์ง ํธ๋ฆฌ์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์๋ฅผ ์ ์ํ๋ ํธ๋ฆฌ ์ํ(traversal) ๋ฐฉ๋ฒ์ ๋ํด ์ ๊น ์์ ๋ณด๊ณ ๊ฐ์.
๊ฐ ์ํ ๋ฐฉ์์ ๋
ธ๋์ ๋ฃจํธ(root)์ ์์ ๋
ธ๋(left, right)๋ฅผ ๋ฐฉ๋ฌธํ๋ ์์์ ๋ฐ๋ผ ๊ตฌ๋ถ๋ผ
ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋ ์ธ ๊ฐ์ง๊ฐ ์๋๋ฐ ๋ชจ๋ ๊น์ด ์ฐ์ ํ์(Depth-First Search, DFS)์ ์ผ์ข
์ด์ผ.
DFS๋ ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ํ ๊ฒฝ๋ก๋ฅผ ๋๊น์ง ํ์ํ ํ, ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ๋ฐฉ์์ ํ์ ๋ฐฉ๋ฒ์ธ๋ฐ, ํธ๋ฆฌ์ ์ํ ๋ฐฉ์์ DFS์ ํ ํํ๋ก ๋ณด๋ ์ด์ ๋ ํธ๋ฆฌ๋ฅผ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊น์ด ๋ค์ด๊ฐ๋ฉฐ ์ํํ๊ธฐ ๋๋ฌธ์ด์ผ.
- ์ ์ ์ํ(Preorder Traversal)
- ์ค์ ์ํ(Inorder Traversal)
- ํ์ ์ํ(Postorder Traversal)
๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.

์ ์ ์ํ
์ ์ ์ํ์์๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด
[๋ฐฉ๋ฌธ์์]
๋ฃจํธ โ ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ
์ ์ ์ํ ๊ฒฐ๊ณผ: A โ B โ D โ E โ C โ F
์ค์ ์ํ
์ค์ ์ํ์์๋ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด. ์ค์ ์ํ๋ ์ด์ง ํ์ ํธ๋ฆฌ์์ ๋ ธ๋๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์์๋ก๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด์ผ.
[๋ฐฉ๋ฌธ์์]
์ผ์ชฝ โ ๋ฃจํธ โ ์ค๋ฅธ์ชฝ
์ค์ ์ํ ๊ฒฐ๊ณผ: D โ B โ E โ A โ C โ F.
ํ์ ์ํ
ํ์ ์ํ์์๋ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ๋ค์์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ํ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด. ํ์ ์ํ๋ ํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋, ํน์ ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ํ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด์ผ.
[๋ฐฉ๋ฌธ์์]
์ผ์ชฝ โ ์ค๋ฅธ์ชฝ โ ๋ฃจํธ
ํ์ ์ํ ๊ฒฐ๊ณผ: D โ E โ B โ F โ C โ A
5. ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌ์ถํ๊ธฐ
์ด์ง ํ์ ํธ๋ฆฌ์ ๋์ ๋ฐ์ดํฐ๊ฐ 3 โ 4 โ 2 โ 8 โ 9 โ 7 โ 1 ์์๋ก ๋ค์ด์จ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ์๋ฆฌ์ ๋ํด์ ์ค๋ช ํด ๋ณผ๊ฒ.
์ด์ง ํ์ ํธ๋ฆฌ๋ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๋ฐ์ ธ์ ํฌ๊ธฐ๊ฐ ์์ผ๋ฉด ์ผ์ชฝ ์์ ์์น์, ํฌ๊ธฐ๊ฐ ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํ๋ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ด.
์๋์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ฝ์
ํ ์ ๋ ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ์ฝ์
ํ๋ฉด์ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฑธ ๋ณผ ์ ์์ด. ์ฆ, ์ฝ์
๊ณผ ๋์์ ์ ๋ ฌ์ ํด.

1๋จ๊ณ
์ต์ด์ ๋ฐ์ดํฐ๋ ๋ฃจํธ ๋
ธ๋๊ฐ ๋ผ. 3์ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฃจํธ ๋
ธ๋๋ก ์ถ๊ฐํด.
2๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 4์ผ. 4๋ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
3๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 2์ผ. 2๋ 3๋ณด๋ค ์์ผ๋๊น ์ผ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
4๋จ๊ณ
ํ์ฌ ์ฝ์
ํ๋ ค๋ ๋ฐ์ดํฐ๋ 8์ด์ผ. 8์ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น๋ฅผ ๋ด์ผ ํด. ์ด๋ฏธ ์์์ด ์๋ ๊ฒฝ์ฐ ๊ฐ์ ๋น๊ตํด. 8์ 4๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ ์์ ์์น๋ฅผ ๋ด. 4์ ์ค๋ฅธ์ชฝ ์์ ์์น๊ฐ ๋น์ด ์์ผ๋๊น ์ด ์๋ฆฌ์ 8์ ๋ฐฐ์นํด. ์ด๋ฐ ์์ผ๋ก ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ๋๋ ๋ฃ์ผ๋ ค๋ ๋์ ๋ฐ์ดํฐ์ ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค๋ฅธ์ชฝ ์์์ผ๋ก, ์์ผ๋ฉด ์ผ์ชฝ ์์์ผ๋ก ๋ฐฐ์นํด.
5๋จ๊ณ
9๋ 3๋ณด๋ค ํฌ๋๊น ์ค๋ฅธ์ชฝ์ ๋ด. 4๋ณด๋ค ํฌ๊ณ 8๋ณด๋ค ํฌ๋๊น 8์ ์ค๋ฅธ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
6๋จ๊ณ
7์ 3๋ณด๋ค ํฌ๊ณ , 4๋ณด๋ค ํฌ๊ณ , 8๋ณด๋ค๋ ์์ผ๋๊น 8์ ์ผ์ชฝ ์์ ์์น์ ๋ฐฐ์นํด.
7๋จ๊ณ
1์ 3๋ณด๋ค ์๊ณ , 2๋ณด๋ค ์์ผ๋ 2์ ์ผ์ชฝ ์์ ์๋ฆฌ์ ๋ฐฐ์นํด
6. ์ด์ง ํ์ ํธ๋ฆฌ ํ์ํ๊ธฐ
์ด์ ์ด์ง ํ์ํธ๋ฆฌ๊ฐ ๋ฐฐ์ด๋ณด๋ค ์ข์ ์ ์ ๋ณด์ฌ์ค๊ฒ. ์ด์ง ํธ๋ฆฌ ํ์ํ๋ ๋ฒ์ ์๋์ ๊ฐ์
- ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ํ์ฌ ๋ ธ๋์ ๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ํ์์ ์ข ๋ฃํ๊ณ ํฌ๋ฉด ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ํ์ํด
- ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ํ์ฌ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ ๋ ธ๋๋ฅผ ํ์ํด
- ๊ฐ์ ์ฐพ์ผ๋ฉด ์ข ๋ฃํด. ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๊ณ์ ํ์ํ๋๋ฐ ๊ฐ์ด ์์ผ๋ฉด ํ์ฌ ํธ๋ฆฌ์ ๊ฐ์ด ์๋ค๊ณ ๊ฐ์ฃผํด

์์ ๊ฐ์ ๊ฒ์ ๋์ ํธ๋ฆฌ์์ 5๋ฅผ ์ฐพ์๋ณด์.
3๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์ฐ์ ์ค๋ฅธ์ชฝ์ ๋ณธ๋ค. 6๋ณด๋ค๋ ์์ผ๋ ์ผ์ชฝ์ ๋ณธ๋ค. ์ผ์ชฝ์๋ ์๋ฌด๊ฒ๋ ์๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ํน์ง์ ๋ฐ๋ฅด๋ฉด ์ด์ 5๊ฐ ์๋ค๋ ๊ฑธ ์๊ธฐ ๋๋ฌธ์ ์ด ํธ๋ฆฌ์๋ 5๊ฐ ์๋ค๋ ๊ฑธ 2๋ฒ๋ง์ ํ์์ผ๋ก ํ๋จ๊ฐ๋ฅํด.
๋ง์ฝ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด ํ์์ ์งํํ๋ค๋ฉด ์์ฐจ์ ์ผ๋ก 5๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ 7๋ฒ์ ๋น๊ต ์ฐ์ฐ์ ์ํํด์ผ ํด. ๊ทธ์ ๋ฐํด ์ด์งํธ๋ฆฌ๋ 2๋ฒ๋ง ๋น๊ต ์ฐ์ฐ์ ์งํํ๊ฒ ๋ผ. ๋ฐ๋ผ์ ๋ฐฐ์ด ํ์๋ณด๋ค ์ด์ง ํ์ ํธ๋ฆฌ์ ํ์์ด ํจ์ฌ ๋น ๋ฅด๋ค.
7. ์ด์ง ํ์ ํธ๋ฆฌ VS ๋ฐฐ์ด ๋น๊ต
์ง๊ธ๊น์ง์ ์ค๋ช
์ ๋ค์ผ๋ฉด '์ด์ง ํ์ ํธ๋ฆฌ์์ ํ์ํ๋ ๊ฒ์ด ๋ฐฐ์ด์์ ํ์ํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ด ์ข์ ๊ฒ ๊ฐ๋ค!'๋ผ๊ณ ์๊ฐํ๋ ์ฌ๋์ด ์์ ์ ์๋ค. ํ์ง๋ง ๋ ์๋ฃ๊ตฌ์ฃ ์ ์ฝ์
๊ณผ ํ์ ์๊ฐ ๋ณต์ก๋๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ท ํ์ด ๋ง์ง ์๋๋ค๋ฉด ์ต์
์ ํ์ฐ O(N)์ด ๋์ด ๋น์ทํ ํจ์จ์ ๋ธ๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ์๊ฐ ๋ณต์ก๋๋ ํธ๋ฆฌ ๊ท ํ์ ์์กดํ๋ค. ํธ๋ฆฌ์ ๊ท ํ์ด ์กํ๋ค๋ ๊ฑด ๊ฐ ๋
ธ๋์ ์ฐจ์๊ฐ ๋น์ทํ๊ฒ ์ ์ง๋๋ฉด์ ๊ฐ ๋
ธ๋์ ์์ ๋
ธ๋ ์๊ฐ ๋น์ทํ๊ฒ ์ ์ง๋๋ ๊ฑธ ๋งํ๋ค. ๊ท ํ์ด ์ ์ง๋์๋ค๊ณ ๊ฐ์ ํ์ ๋ ์ฝ์
๊ณผ ํ์ ์ฐ์ฐ ์ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ ์ฅ๋ ๋
ธ๋๊ฐ N๊ฐ๋ผ๊ณ ํ๋ฉด ์๊ฐ ๋ณต์ก๋๋ O(logN)์ด๋ค. ํ์ง๋ง ๊ท ํ์ด ๋ง์ง ์์ ๋๋ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐฐ์ด๊ณผ ๋น์ทํ๋ค.
* ๊ท ํ์ด ์กํ ์๋ค๋ ๊ฑด ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋์ด ์ฐจ๊ฐ 1 ์ดํ์ธ ๊ฒฝ์ฐ์ด๋ค. ๊ทธ๋ ์ง ์์ ๋๋ ๊ท ํ์ด ์กํ ์์ง ์๋ค๋ผ๊ณ ํ๋ค. ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ์ด์ง ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ ํ์๊ฐ ํธ๋ฆฌ ๋์ด์ ๋น๋กํ๊ณ ํธ๋ฆฌ์ ๋์ด๋ logN์ด๋ฏ๋ก ํ์ ์๊ฐ ๋ณต์ก๋๋ฅผ O(logN)์ผ๋ก ์ ์งํ ์ ์๋ค. ํ์ง๋ง ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฑด ๋์ด๋๊ฐ ๋๋ฌด ๋๊ธฐ ๋๋ฌธ์ ์ฝํ
์๋ ๊ฑฐ์ ๋์ค์ง ์๋๋ค.
8. ์์ ๋ฌธ์ (ํธ๋ฆฌ ์ํ)
๐ 8-1. ๋ฌธ์ ์ค๋ช
์ด์ง ํธ๋ฆฌ๋ฅผ ํํํ ๋ฆฌ์คํธ nodes๋ฅผ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด์ nodes๊ฐ [1, 2, 3, 4, 5, 6, 7]์ด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํธ๋ฆฌ๋ฅผ ํํํ ๊ฒ์
๋๋ค. ํด๋น ์ด์ง ํธ๋ฆฌ์ ๋ํ์ฌ ์ ์ ์ํ, ์ค์ ์ํ, ํ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ solution() ํจ์๋ฅผ ๊ตฌํํ์ธ์
์ ์ฝ์กฐ๊ฑด
- ์ ๋ ฅ ๋ ธ๋๊ฐ์ ๊ฐ์๋ 1๊ฐ ์ด์ 1,000๊ฐ ์ดํ์ด๋ค.
- ๋ ธ๋๊ฐ์ ์ ์ํ์ด๋ฉฐ, ์ค๋ณต๋์ง ์๋๋ค.
์ ์ถ๋ ฅ ์
nodes | return |
[1, 2, 3, 4, 5, 6, 7] | ["1 2 3 4 5 6 7", "4 2 5 1 6 3 7", "4 5 2 6 7 3 1"] |
๐ก 8-2. ํ์ด ๊ณผ์ & ์ ๋ต ์ฝ๋
๋ฌธ์ ๊ทธ๋๋ก ์ ์, ์ค์, ํ์ ์ํ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.
๐ ํธ๋ฆฌ ์ํ ๋ฐฉ์์?
- ์ ์ ์ํ(Preorder): Root โ Left โ Right
- ์ค์ ์ํ(Inorder): Left โ Root โ Right
- ํ์ ์ํ(Postorder): Left โ Right โ Root
[์ ๋ต ์ฝ๋1]
import java.util.*; class Solution { public static List<List<Integer>> solution(int[] nodes) { List<Integer> preorderList = new ArrayList<>(); List<Integer> inorderList = new ArrayList<>(); List<Integer> postorderList = new ArrayList<>(); traverse(nodes, 0, preorderList, inorderList, postorderList); return Arrays.asList(preorderList, inorderList, postorderList); } private static void traverse(int[] nodes, int index, List<Integer> preorder, List<Integer> inorder, List<Integer> postorder) { if (index >= nodes.length) return; preorder.add(nodes[index]); // ์ ์ ์ํ (Preorder): Root โ Left โ Right traverse(nodes, 2 * index + 1, preorder, inorder, postorder); // Left inorder.add(nodes[index]); // ์ค์ ์ํ (Inorder): Left โ Root โ Right traverse(nodes, 2 * index + 2, preorder, inorder, postorder); // Right postorder.add(nodes[index]); // ํ์ ์ํ (Postorder): Left โ Right โ Root } public static void main(String[] args) { int[] nodes = {1, 2, 3, 4, 5, 6, 7}; List<List<Integer>> result = solution(nodes); System.out.println("์ ์ ์ํ: " + result.get(0)); System.out.println("์ค์ ์ํ: " + result.get(1)); System.out.println("ํ์ ์ํ: " + result.get(2)); } }
solution ํจ์
- preorderList, inorderList, postorderList๋ฅผ ์์ฑํ๊ธฐ
- traverse() ํจ์๋ฅผ ํธ์ถํ์ฌ ํธ๋ฆฌ ํ์
- ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ ๋ฐฐ์ด ํํ๋ก ๋ฐํ
traverse() ํจ์ (์ฌ๊ทํจ์)
- ํ์ฌ ๋ ธ๋์ index๊ฐ nodes.length๋ฅผ ์ด๊ณผํ๋ฉด ์ข ๋ฃ
- ์ ์ ์ํ: ํ์ฌ ๋
ธ๋๋ฅผ ๋จผ์ ๋ฆฌ์คํธ์ ์ถ๊ฐ
์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ: 2 * index + 1 - ์ค์ ์ํ: ์ผ์ชฝ ํ์ ํ ํ์ฌ ๋
ธ๋ ์ถ๊ฐ
์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ: 2 * index + 2 - ํ์ ์ํ: ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ํ์ ํ ํ์ฌ ๋ ธ๋ ์ถ๊ฐ
[์ ๋ต ์ฝ๋2]
import java.util.*; class Solution { public static List<String> solution(int[] nodes) { String pre = preorder(nodes, 0).trim(); String in = inorder(nodes, 0).trim(); String post = postorder(nodes, 0).trim(); return Arrays.asList(pre, in, post); } private static String preorder(int[] nodes, int idx) { if (idx >= nodes.length) return ""; return nodes[idx] + " " + preorder(nodes, 2 * idx + 1) + preorder(nodes, 2 * idx + 2); } private static String inorder(int[] nodes, int idx) { if (idx >= nodes.length) return ""; return inorder(nodes, 2 * idx + 1) + nodes[idx] + " " + inorder(nodes, 2 * idx + 2); } private static String postorder(int[] nodes, int idx) { if (idx >= nodes.length) return ""; return postorder(nodes, 2 * idx + 1) + postorder(nodes, 2 * idx + 2) + nodes[idx] + " "; } public static void main(String[] args) { int[] nodes = {1, 2, 3, 4, 5, 6, 7}; List<String> result = solution(nodes); System.out.println("์ ์ ์ํ: " + result.get(0)); System.out.println("์ค์ ์ํ: " + result.get(1)); System.out.println("ํ์ ์ํ: " + result.get(2)); } }
๋ฌธ์ ์์ nodes๋ ๋
ธ๋ ๋ฆฌ์คํธ๋ฅผ ์๋ฏธํ๊ณ solution() ๋ฉ์๋์์๋ ๋ฆฌ์คํธ์ ๋ฃจํธ ๋
ธ๋์ ์ธ๋ฑ์ค๋ฅผ preorder(), inorder(), postorder() ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌํด์ ์ ์ ์ํ, ์ค์ ์ํ, ํ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ฐ ๊ณ์ฐํ๊ณ ์ด๊ฑธ ๋ฆฌ์คํธ๋ก ๋ฐํํ๋ค.
๊ฐ ๋ฉ์๋์์๋
- idx๊ฐ ๋ ธ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค ์์ ๋๋ง ์ฌ๊ท ํธ์ถํ๋ค.
- idx๊ฐ ๋ ธ๋ ๋ฐฐ์ด์ ๊ธธ์ด์ ๊ฐ๊ฑฐ๋ ํฌ๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
- ๋ฐํ๋ ๊ฒฐ๊ณผ ๋ฌธ์์ด์์๋ ๋ง์ง๋ง ๊ณต๋ฐฑ์ ์ ๊ฑฐํ ๋ค์ ๋ฐํํ๋ค.
9. ์ฐธ๊ณ ์๋ฃ & ํฌ์คํ ์์ฑ์ ๋์์ ์ฃผ์ ๋ธ๋ก๊ทธ
1. ๊ถ๊ธํ ์ ์ chatGPT์ ๋ฌผ์ด๋ณด๋ฉด์ ์์ฑํจ https://chatgpt.com/
2. ๊นํฌ์ฑ. ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณต 97๋ฌธ์ ๋ก ์๋ฒฝ ๋๋น ์ฝ๋ฉ ํ
์คํธ ํฉ๊ฒฉ์ ๋๊ธฐ: ์๋ฐ ํธ. ํ๋น๋ฏธ๋์ด, 2023.
3. [ํ๋ก๊ทธ๋๋จธ์ค] ๊ธธ์ฐพ๊ธฐ ๊ฒ์ => ์ด์ง ํธ๋ฆฌ์ DFS๋ฅผ ํตํ ์ํ ๋ฐฉ์ ์ ๋ฆฌ ์ค ํธ๋ฆฌ ์ํ ๋ถ๋ถ ๋ฐ์ท
https://velog.io/@sperr/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B8%B8%EC%B0%BE%EA%B8%B0-%EA%B2%8C%EC%9E%84-%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%AC%EC%99%80-DFS%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%88%9C%ED%9A%8C-%EB%B0%A9%EC%8B%9D-%EC%A0%95%EB%A6%AC
'Algorithm > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ฆผ์ผ๋ก ์ฝ๊ฒ ์ดํดํ๋ ์๋ฐ์ Queue (ํ) (8) | 2025.02.21 |
---|