๋ฐฐ์ด, ์คํ, ํ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ ฌ๋ก ์ธ์ด ์ ํ ๊ตฌ์กฐ์๋ค๋ฉด ์ค๋ ๋ค๋ฃฐ ํธ๋ฆฌ(Tree)๋ ์กฐ๊ธ ๋ค๋ฅด๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ์์ ์ฌ๋ฆฌ๋ ๋น์ ํ ๊ตฌ์กฐ๋ผ ์ฒ์ ์ ํ๋ฉด ๋ค์ ๋ฏ์ค๊ฒ ๋๊ปด์ง ์ ์์ง๋ง ์ฌ์ค ํธ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ฌ์ฉํ๋ ํ์ผ ์์คํ
, ์น ํ์ด์ง์ HTML DOM, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ๋ฑ์ ์ด๋ฏธ ๊น์์ด ์๋ฆฌ ์ก๊ณ ์๋ค.
ํธ๋ฆฌ๋ *๋
ธ๋(Node)๋ค์ด ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค. ํ๋์ ์ต์์ ๋
ธ๋์์ ์์ํด ์๋๋ก ๊ฐ์ง๊ฐ ๋ป์ด๋๊ฐ๋ ํํ๋ฅผ ๊ฐ์ง๋ค.
์ด๋ฐ ๊ตฌ์กฐ ๋๋ถ์ ํธ๋ฆฌ๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ทธ๋ฆ์ ๋์ด ๊ณ์ธต์ ํํํ๊ฑฐ๋ ๋ฒ์๋ฅผ ๋๋์ด ํ์ํ ๋ ๊ฐ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
ํธ๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ํด ํ์ํ ์ฉ์ด๋ถํฐ ์ ๋ฆฌํด๋ณด์.
ํธ๋ฆฌ๊ฐ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ ๊ตฌ๋ณ๋๋ ๋ช
ํํ ์ฑ์ง๋ค์ ์ ๋ฆฌํด ๋ณด์.
1. ์ฌ์ดํด(Cycle)์ด ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ
ํธ๋ฆฌ์ ๊ฐ์ฅ ํฐ ๊ท์น์ ์ด๋ค ๋
ธ๋์์ ์ถ๋ฐํด๋ ๋ค์ ์๊ธฐ ์์ ์ผ๋ก ๋์์ค๋ ๊ฒฝ๋ก๊ฐ ์๋ค๋ ์ ์ด๋ค. ๋ชจ๋ ๋
ธ๋๋ ๋จ๋ฐฉํฅ ํน์ ๊ณ์ธต์ ์ผ๋ก๋ง ์ฐ๊ฒฐ๋์ด ์์ด ํ๋ฆ์ด ๋ช
ํํ๋ค.
2. ๋
ธ๋์ ๊ฐ์ ์ ๊ด๊ณ
ํธ๋ฆฌ ๋ด์ ๋
ธ๋ ๊ฐ์๊ฐ N๊ฐ๋ผ๋ฉด ๋
ธ๋๋ค์ ์๋ ๊ฐ์ ์ ๊ฐ์๋ ํญ์ N - 1๊ฐ์ด๋ค. ๋ชจ๋ ์์ ๋
ธ๋๋ ๋ฐ๋์ ํ๋์ ๋ถ๋ชจ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฃจํธ ๋
ธ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋
ธ๋ ์๋งํผ ๊ฐ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
3. ๋จ๋ฐฉํฅ ๊ณ์ธต ๊ตฌ์กฐ
๋ชจ๋ ํธ๋ฆฌ๋ ๋จ ํ๋์ ๋ฟ๋ฆฌ(Root)์์ ์์ํ๋ฉฐ ๋ถ๋ชจ ๋
ธ๋๋ ํ๋์ง๋ง ์์ ๋
ธ๋๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์กด์ฌํ ์ ์๋ค. (๋ฐ๋๋ก ์์ ์
์ฅ์์ ๋ถ๋ชจ๋ ์ค์ง ํ๋)
์ด๋ฐ ํน์ง๋ค ๋๋ถ์ ํธ๋ฆฌ๋ ๊ตฌ์กฐ๊ฐ ๋ช ํํ๊ณ ํ์ ๊ฒฝ๋ก๊ฐ ์์ธก ๊ฐ๋ฅํด์ง๋ค. ๋ฐ์ดํฐ ์ฌ์ด์ ์ถฉ๋ ๊ฑฑ์ ์์ด ํน์ ๋ฐ์ดํฐ๋ฅผ ํฅํด ์ต๋จ ๊ฒฝ๋ก๋ก ๋ด๋ ค๊ฐ ์ ์๋ค.
ํธ๋ฆฌ ๊ตฌ์กฐ ์ค ์ค๋ฌด์์ ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์ฌ์ฉ๋๊ณ ์๊ณ ๋ฆฌ์ฆ ํ
์คํธ์์๋ ์์ฃผ ๋ฑ์ฅํ๋ ํํ๊ฐ ๋ฐ๋ก ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ด์ง ํธ๋ฆฌ๋ ๋ชจ๋ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋
ธ๋๋ง์ ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ์์ ๋
ธ๋๋ ๋ณดํต ์ผ์ชฝ ์์(Left Child)๊ณผ ์ค๋ฅธ์ชฝ ์์(Right Child)์ผ๋ก ๊ตฌ๋ถํ๋ค.
์ ์์ ์๋ฅผ 2๊ฐ๋ก ์ ํํ ๊น?
์์์ ์๋ฅผ ์ ํํ๋ฉด ๊ตฌ์กฐ๊ฐ ๋จ์ํด์ ธ์ ๋ฐฐ์ด์ด๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํํ๊ธฐ๊ฐ ๋งค์ฐ ์ฌ์์ง๋ค. ๋ํ '์ด์ง ํ์ ํธ๋ฆฌ' ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ํน์ ๊ท์น์ ๋ฐ๋ผ ๋ฐฐ์นํ ์ ์์ด ํ์ ์๋๋ฅผ ๊ทน๋ํ ํ ์ ์๋ค.
์ด์ง ํธ๋ฆฌ๋ ๊ทธ ํํ์ ๋ฐ๋ผ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๋๋๋ค.
์ด์ง ํธ๋ฆฌ ๊ตฌํ (TypeScript)
์ค์ ์ฝ๋๋ก ๋
ธ๋๋ฅผ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ํํํ ์ ์๋ค.
class TreeNode {
value: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(value: number) {
this.value = value;
this.left = null; // ์ผ์ชฝ ์์
this.right = null; // ์ค๋ฅธ์ชฝ ์์
}
}
์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋ฌ๋ฆฌ ํธ๋ฆฌ๋ ๋น์ ํ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ์ด๋ค ์์๋ก ๋ฐฉ๋ฌธํ ๊ฒ์ธ๊ฐ๊ฐ ๋งค์ฐ ์ค์ํ๋ค. ํฌ๊ฒ ๊น์ด ์ฐ์ ํ์(DFS)๊ณผ ๋๋น ์ฐ์ ํ์(BFS)์ผ๋ก ๋๋๋ค.
1. ๊น์ด ์ฐ์ ํ์ (DFS, Depth-First Search)
ํ ๋ฐฉํฅ์ผ๋ก ์ต๋ํ ๊น์์ด ๋ด๋ ค๊ฐ๋ค๊ฐ ๋ ์ด์ ๊ฐ ๊ณณ์ด ์์ผ๋ฉด ๋ค์ ๋์์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์ํ๋ ๋ฐฉ์์ด๋ค. ์ฃผ๋ก ์ฌ๊ท(Recursion)๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
2. ๋๋น ์ฐ์ ํ์ (BFS, Breadth-First Search)
๊น๊ฒ ๋ด๋ ค๊ฐ๊ธฐ๋ณด๋ค ์ธ์ ํ ๋
ธ๋(๊ฐ์ ๋ ๋ฒจ)๋ค์ ๋จผ์ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค. ์ฃผ๋ก ํ(Queue) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ๊ฒฐ๊ตญ ํจ์จ์ ์ธ ํ์์ด๋ค. ํ์ง๋ง ๋ชจ๋ ํธ๋ฆฌ๊ฐ ํญ์ ๋น ๋ฅธ ๊ฒ์ ์๋๋ค.
1. ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์ ํ์: O(n)
๊ท์น ์์ด ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ์์ ํน์ ๊ฐ์ ์ฐพ์ผ๋ ค๋ฉด ์ต์
์ ๊ฒฝ์ฐ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ค ์ฐพ์์ผ ํ๋ค. ์ด๋์ ์๊ฐ ๋ณต์ก๋๋ ๋ฐฐ์ด๊ณผ ๋ค๋ฅผ ๋ฐ ์๋ O(n)์ด ๋๋ค.
2. ์ด์ง ํ์ ํธ๋ฆฌ(BST)์ ํ์: O(log n)
๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ๋๋ถํฐ ๋ถ๋ชจ๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ, ํฌ๋ฉด ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ๊ท์น์ ์งํค๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค. ํ์์ ํ ๋ฒ ์งํํ ๋๋ง๋ค ํ์ธํด์ผ ํ ๋ฐ์ดํฐ์ ์์ด ์ ๋ฐ์ฉ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ถ๊ทน์ ์ธ ๋ชฉํ์ด๋ค.
3. ์ฃผ์ํ ์ : ํธํฅ ํธ๋ฆฌ(Skewed Tree)
์๋ฌด๋ฆฌ ์ด์ง ํ์ ํธ๋ฆฌ๋ผ๋ ๋ฐ์ดํฐ๊ฐ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์น์ฐ์ณ์ ๋ค์ด์ค๋ฉด ๊ฒฐ๊ตญ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅผ ๋ฐ ์๋ ์ ํ ๊ตฌ์กฐ๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์ค์ ํ์
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ์ ๋ฆฌ์ง ์๋๋ก ์ค์ค๋ก ๊ท ํ์ ์ก๋ AVL ํธ๋ฆฌ๋ Red-Black ํธ๋ฆฌ, B-Tree ๊ฐ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
ํธ๋ฆฌ๋ ํ๋ ์ปดํจํ
์์คํ
์ ๊ทผ๊ฐ์ ์ด๋ฃจ๊ณ ์๋ค.
1. ํ์ผ ์์คํ
(File System)
์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ฌ์ฉํ๋ ์๋์ฐ์ ํ์ผ ํ์๊ธฐ๋ ๋งฅ์ Finder๊ฐ ๋ฐ๋ก ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ์ ์ธ ์์ด๋ค. C๋๋ผ์ด๋ธ(Root) ์๋์ ์ฌ๋ฌ ํด๋(Internal Node)๊ฐ ์๊ณ , ๊ทธ ์์ ๋ ์ด์ ์ชผ๊ฐ์ง์ง ์๋ ํ์ผ(Leaf Node)๋ค์ด ์กด์ฌํ๋ ํํ์ด๋ค.
2. HTML DOM (Document Object Model)
์น ๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ฌธ์๋ฅผ ํด์ํ ๋๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. <html> ํ๊ทธ๋ฅผ ๋ฃจํธ๋ก ํ์ฌ <head>, <body> ๋ฑ์ ์์ ๋
ธ๋๊ฐ ๋ป์ด ๋๊ฐ๋ ํํ์ด๋ค. ์ฐ๋ฆฌ๊ฐ JavaScript๋ก ์์๋ฅผ ์ฐพ๊ณ ์กฐ์ํ ์ ์๋ ์ด์ ๋ DOM์ด ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค (B-Tree)
์๋ฐฑ๋ง ๊ฐ์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ์ ๋ณด๋ฅผ ์์๊ฐ์ ์ฐพ์๋ผ ์ ์๋ ๋น๊ฒฐ์ ๋ฐ๋ก B-Tree ๊ณ์ธต ๊ตฌ์กฐ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ํ์ ๋ฒ์๋ฅผ ์ขํ๋๊ฐ๋ฉฐ ์ฑ๋ฅ์ ์ต์ ํํ๋ค.
