ํธ๋ฆฌ์ ๊ฐ๋
ํธ๋ฆฌ(Tree)๋ ๋ ธ๋(Node)์ ๊ฐ์ (Edge)์ผ๋ก ๊ตฌ์ฑ๋ ๊ณ์ธต์ ์๋ฃ๊ตฌ์กฐ๋ค. ๋ณดํต ๋ฃจํธ(Root)๋ผ ๋ถ๋ฆฌ๋ ์ต์๋จ ๋ ธ๋์์ ์์ํด์ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฝ๊ฒ ๋งํด ํ๋์ ๋ถ๋ชจ ๋ ธ๋ ์๋์ ์ฌ๋ฌ ์์ ๋ ธ๋๊ฐ ๋ถ์ด ์๊ณ , ์์๋ค์ด ๋ค์ ์์์ ๊ฐ์ง ์ ์๋ ๊ตฌ์กฐ์ธ ๊ฒ์ด๋ค. ํธ๋ฆฌ๋ ๋ ธ๋ ์ฌ์ด์ ์ํ์ด ์๋ ๋น์ํ ๊ทธ๋ํ์ ํ ์ข ๋ฅ์ด๊ธฐ๋ ํ๋ค.
ํธ๋ฆฌ์์ ์์ฃผ ์ฐ์ด๋ ์ฉ์ด๋ค
- ๋ ธ๋(Node): ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์
- ๋ฃจํธ ๋ ธ๋(Root Node): ํธ๋ฆฌ์ ์ต์๋จ์ ์๋ ๋ ธ๋
- ๋ฆฌํ ๋ ธ๋(Leaf Node): ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋
- ๋ถ๋ชจ ๋ ธ๋(Parent Node): ๋ฃจํธ ๋ ธ๋ ๋ฐฉํฅ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋
- ์์ ๋ ธ๋(Child Node): ๋ฃจํธ ๋ ธ๋ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋
- ํ์ ๋ ธ๋(Siblings Node): ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ ๋ ธ๋๋ค
- ๊ฐ์ (Edge): ๋ ธ๋๋ค ๊ฐ์ ์ฐ๊ฒฐ
- ๋ ๋ฒจ(Level): ํน์ ๋ ธ๋๊ฐ ๋ฃจํธ๋ก๋ถํฐ ๋จ์ด์ ธ ์๋ ๊ฑฐ๋ฆฌ
- ๊น์ด(Depth): ๋ฃจํธ์์ ํน์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ
- ๋์ด(Height): ๋ฃจํธ์์ ๊ฐ์ฅ ๊น์ ๋ฆฌํ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ
- ๋๋น(Width): ๊ฐ์ฅ ๋ง์ ๋ ธ๋๋ฅผ ๊ฐ์ง ๋ ๋ฒจ์ ํฌ๊ธฐ
- ํฌ๊ธฐ(Size): ๋ ธ๋์ ๊ฐ์
- ์ฐจ์(Degree): ๊ฐ ๋ ธ๋์ ์์์ ๊ฐ์
- ํธ๋ฆฌ์ ์ฐจ์(Degree of tree): ํธ๋ฆฌ์ ์ต๋ ์ฐจ์
๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์ ํธ๋ฆฌ์ ํน์ง
ํธ๋ฆฌ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์, ๊ฐ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ก์ ํฌ์ธํฐ๋ฅผ ํฌํจํ๋ค. ์ด ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์์ ๋์ ํ ๋น์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด์ฒ๋ผ ํธ๋ฆฌ๋ ํฌ์ธํฐ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ๋ผ์ ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ ์ธ์๋ ํฌ์ธํฐ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค. ํฌ์ธํฐ๋ ์์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ๊ฐ ํด์๋ก ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ํธ๋ฆฌ์ ๊ท ํ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ํธ๋ฆฌ์ ๋ ธ๋๊ฐ ๊ท ํ์ ์ด๋ฃจ๊ณ ์์ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ์ข๋ค. ๊ท ํ ํธ๋ฆฌ์์๋ ํธ๋ฆฌ์ ๊น์ด๊ฐ log n์ ๊ฐ๊น์ฐ๋ฏ๋ก, ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค. ํ์ง๋ง ๋ถ๊ท ํ ํธ๋ฆฌ์์๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊น์ด๊ฐ ๊ธธ์ด์ง ์ ์์ด, ํน์ ๋ ธ๋๋ฅผ ์ฐพ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋นํจ์จ์ ์ผ ์ ์๋ค.
๊ท ํ ํธ๋ฆฌ๋?
๊ท ํ ํธ๋ฆฌ๋ ๋ ธ๋์ ์ฝ์ , ์ญ์ ํ์๋ ํธ๋ฆฌ์ ๋์ด๊ฐ ๋๋ฌด ํฌ์ง ์๋๋ก ์ ์งํ๋ ์ด์ง ํธ๋ฆฌ์ ํ ์ข ๋ฅ์ด๋ค. ์ด๋ ํธ๋ฆฌ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ , ํ์, ์ฝ์ , ์ญ์ ๋ฑ์ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์ํํ๊ธฐ ์ํด ํ์ํ๋ค.
๊ท ํํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด ์ฐจ์ด๊ฐ ์ผ์ ๋ฒ์ ๋ด์ ์๋๋ก ์ ์งํ๋ค. ๋ํ, ์๋ก์ด ๋ ธ๋๊ฐ ์ฝ์ ๋๊ฑฐ๋ ์ญ์ ๋ ๋๋ง๋ค ํธ๋ฆฌ๊ฐ ๊ท ํ์ ์์ง ์๋๋ก ์กฐ์ ํ๋ค. ์ด ๊ณผ์ ์์ ํ์ (rotate) ์ฐ์ฐ์ ํตํด ๊ตฌ์กฐ๋ฅผ ์ฌ์กฐ์ ํ๊ฒ ๋๋ค.
๊ท ํ ํธ๋ฆฌ์ ์๋ก AVL ํธ๋ฆฌ์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๊ฐ ์๋ค.
ํธ๋ฆฌ์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- ๊ณ์ธต์ ๋ฐ์ดํฐ ํํ, ์ฆ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐ ๋ฐ์ด๋๋ค.
- ์ด์ง ํธ๋ฆฌ, B-ํธ๋ฆฌ, ํ ํธ๋ฆฌ ๋ฑ ๋ค์ํ ๋ณํ์ด ์กด์ฌํ๋ ๋ฑ, ๋ค์ํ ์์ฉ ๋ถ์ผ์์ ์ฌ์ฉํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋จ์
- ๊ตฌํ์ด ๋ค์ ๋ณต์กํ๋ค. ํนํ, ๊ท ํ ํธ๋ฆฌ๋ ํธ๋ผ์ด ๊ฐ์ ๊ณ ๊ธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์๋ค.
- ๊ฐ ๋ ธ๋๊ฐ ์์ ๋ ธ๋์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์ํ๋ค.
ํธ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก
- ๊ณ์ธต์ ์ธ ๋ฐ์ดํฐ๋ฅผ ํํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํ์ผ ์์คํ ์์ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ๊ณ์ธต์ ์ผ๋ก ํํํ ๋
- HTML, XML ๊ฐ์ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ํํํ ๋
- ์กฐ์ง๋๋ ๊ณ๋ณด๋ ๊ฐ์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ผ ๋
- ๊ทธ๋ํ ํ์ ๋ฐ ๊ฒฝ๋ก ์ฐพ๊ธฐ
- DFS๋ BFS๋ฅผ ์ฌ์ฉํด ๊ทธ๋ํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ํ ๋
- ๋คํธ์ํฌ, ์ง๋, ๊ฒ์ ๋ฑ์์ ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋
- ๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํฐ์ ์์ถ์ด๋ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ํํ๋ง ์ฝ๋ฉ์ฒ๋ผ ๋ฐ์ดํฐ ์์ถ ์๊ณ ๋ฆฌ์ฆ์์ ํธ๋ฆฌ๋ฅผ ์ด์ฉํด ์ต์ ํ ํ ๋
- ํธ๋ผ์ด(Trie) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด ๋ฌธ์์ด ์งํฉ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ฒ์ํ ๋ (ex. ์ฌ์ , ์๋์์ฑ)
์ด์ง ํธ๋ฆฌ์ ๊ฐ๋
์ด์ง ํธ๋ฆฌ(Binary Tree)๋ ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ค. ์ด ๋ ์์์ ๋ณดํต ์ผ์ชฝ ์์(Left Child)๊ณผ ์ค๋ฅธ์ชฝ ์์(Right Child)์ผ๋ก ๋๋๋ฉฐ, ๊ฐ๊ฐ ๋ณ๋์ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋๋ค. ์ด์ง ํธ๋ฆฌ๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๋ํ๋ด๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ฑฐ๋ ํ์ํ ์ ์๋ ํน์ง์ ๊ฐ์ง๋ค.
์ด์ง ํธ๋ฆฌ์์ ์ค์ํ ์ ์ ๊ท ํ์ด๋ค. ํธ๋ฆฌ๊ฐ ๊ท ํ์ ์ด๋ฃจ๋ฉด ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์ด ํจ์จ์ ์ผ๋ก ์ํ๋์ง๋ง, ๋ถ๊ท ํํ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
์ด์ง ํธ๋ฆฌ์ ์ข ๋ฅ
1. ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree)
๋ชจ๋ ๋ ๋ฒจ์ด ๊ฝ ์ฐจ ์๊ฑฐ๋ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ ๋ชจ๋ ๋ ๋ฒจ์ด ์์ ํ ์ฑ์์ง ์ด์ง ํธ๋ฆฌ๋ค. ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ ธ๋๋ ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋ก ์ฑ์์ง๋ค.
2. ํฌํ ์ด์ง ํธ๋ฆฌ(Full Binary Tree)
๋ชจ๋ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ฅผ 0๊ฐ ๋๋ ์ ํํ ๋ ๊ฐ์ฉ ๊ฐ์ง๊ณ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๊ฐ ๋์ผํ ๊น์ด์ ์๋ ์ด์ง ํธ๋ฆฌ๋ค.
3. ๊ท ํ ์ด์ง ํธ๋ฆฌ(Balanced Binary Tree)
ํธ๋ฆฌ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด ์ฐจ์ด๊ฐ 1 ์ดํ์ธ ์ด์ง ํธ๋ฆฌ๋ค. ์ ์ด๋ฏธ์ง์์ ๋ถ๊ท ํ ์ด์ง ํธ๋ฆฌ๋ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด๊ฐ 3์ด๊ณ , ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด๊ฐ 0์ด๊ธฐ ๋๋ฌธ์ ๋ถ๊ท ํ์ด๋ค. ๊ท ํ ์ด์ง ํธ๋ฆฌ์ ๋ํ์ ์ธ ์๋ก AVL ํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ๊ฐ ์๋ค.
4. ์ด์ง ํ์ํธ๋ฆฌ(Binary Search Tree, BST)
์ด์ง ํ์ ํธ๋ฆฌ๋ ์ผ์ชฝ ์์ ๋ ธ๋๋ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ ๋ถ๋ชจ๋ณด๋ค ํฌ๋ค๋ ๊ท์น์ ๊ฐ์ง๋ค. ์ด ๊ท์น ๋๋ถ์ ํ์, ์ฝ์ , ์ญ์ ๊ฐ ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์๋ค.
์ด์ง ํธ๋ฆฌ์ ์ํ
์ ์ ์ํ(Preorder)
์์๋ ๋ถ๋ชจ -> ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์์ด๋ค. ๋จผ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ , ๊ทธ ํ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์์ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ด๋ค.
์ค์ ์ํ(Inorder)
์์๋ ์ผ์ชฝ ์์ -> ๋ถ๋ชจ -> ์ค๋ฅธ์ชฝ ์์์ด๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์์ ์ค์ ์ํ๋ฅผ ํ๋ฉด ๋ ธ๋์ ๊ฐ์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
ํ์ ์ํ(Postorder)
์์๋ ์ผ์ชฝ ์์ -> ์ค๋ฅธ์ชฝ ์์ -> ๋ถ๋ชจ์ด๋ค. ์์ ๋ ธ๋๋ฅผ ๋จผ์ ๋ชจ๋ ๋ฐฉ๋ฌธํ ํ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ผ๋ก, ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ ๋ฆฌํ ๋ ์ ์ฉํ๋ค.
์ด์ง ํธ๋ฆฌ์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- ์ด์ง ํธ๋ฆฌ๋ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ ๋จ์ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด ๊ตฌํ์ด ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์ด์ง ํธ๋ฆฌ์์๋ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ณผ์ ์ด ๋น๊ต์ ๊ฐ๋จํ๋ค.
๋จ์
- ์ด์ง ํธ๋ฆฌ๋ ์ฝ์
์์์ ๋ฐ๋ผ ๊ตฌ์กฐ๊ฐ ๋ถ๊ท ํํด์ง ์ ์๋ค.
- ๊ตฌ์กฐ๊ฐ ๋ถ๊ตฐํํ ๊ฒฝ์ฐ, ํ์์ด๋ ์ฝ์ , ์ญ์ ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)์ผ๋ก ์ฆ๊ฐํ ์ ์๋ค.
- ์ผ๋ฐ ์ด์ง ํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ํ์ ํจ์จ์ฑ์ด ๋จ์ด์ง ์ ์๋ค.