Tree
ํธ๋ฆฌ์ ๊ฐ๋
- ํธ๋ฆฌ๋ ๋
ธ๋๋ก ์ด๋ฃจ์ด์ง ๊ณ์ธต ๊ตฌ์กฐ์ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
- ํ๋์ ๋ฃจํธ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ค.
- ๋ฃจํธ ๋
ธ๋๋ 0๊ฐ ์ด์์ ์์ ๋
ธ๋๋ฅผ ๊ฐ๋๋ค.
- ์์ ๋
ธ๋๋ค ๋ํ 0๊ฐ ์ด์์ ์์ ๋
ธ๋๋ฅผ ๊ฐ๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ์ ์๋๋ค.
- ํธ๋ฆฌ๋ ๋
ธ๋(node)๋ค๊ณผ ์ฐ๊ฒฐํ๋ ๊ฐ์ (edge)๋ค๋ก ๊ตฌ์ฑ๋๋ค.
- ํธ๋ฆฌ์๋ ์ฌ์ดํด(cycle)์ด ์กด์ฌํ ์ ์๋ค.
- ๊ทธ๋ํ์ ํ ์ข
๋ฅ (Acyclic Connected Graph / Directed Acyclic Graph)์ด๋ค.
๊ด๋ จ ์ฉ์ด
- ๋ฃจํธ ๋
ธ๋ (root node) : ๋ถ๋ชจ๊ฐ ์๋ ๋
ธ๋, ํธ๋ฆฌ๋ ํ๋์ ๋ฃจํธ ๋
ธ๋๋ง์ ๊ฐ์ง๋ค.
- ๋จ๋ง ๋
ธ๋ (leaf node) : ์์์ด ์๋ ๋
ธ๋, ๋ง๋จ ๋
ธ๋, ์ ๋
ธ๋, ๋ฆฌํ ๋
ธ๋ ๋ฑ์ผ๋ก๋ ๋ถ๋ฆฐ๋ค.
- ๋ด๋ถ ๋
ธ๋ (internal node) : ๋จ๋ง ๋
ธ๋๊ฐ ์๋ ๋
ธ๋
- ๊ฐ์ (edge) : ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ , link, branch๋ก๋ ๋ถ๋ฆฐ๋ค.
- ํ์ (sibling) : ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ๋
ธ๋
- ๋
ธ๋์ ํฌ๊ธฐ (size) : ์์ ์ ํฌํจํ ์์ ์ ๋ชจ๋ ์์ ๋
ธ๋์ ๊ฐ์
- ๋
ธ๋์ ๊น์ด (depth) : ๋ฃจํธ์์ ์ด๋ค ๋
ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์
- ๋
ธ๋์ ๋ ๋ฒจ (level) : ํธ๋ฆฌ์ ํน์ ๊น์ด๋ฅผ ๊ฐ์ง๋ ๋
ธ๋์ ์งํฉ
- ๋
ธ๋์ ์ฐจ์ (degree) : ํ์ ํธ๋ฆฌ ๊ฐ์ || ๊ฐ์ ์ = ๊ฐ ๋
ธ๋๊ฐ ์ง๋ ๊ฐ์ง์ ์
- ํธ๋ฆฌ์ ์ฐจ์ (degree of tree) : ํธ๋ฆฌ์ ์ต๋ ์ฐจ์
- ํธ๋ฆฌ์ ๋์ด(height) : ๋ฃจํธ ๋
ธ๋์์ ๊ฐ์ฅ ๊น์ํ ์๋ ๋
ธ๋์ ๊น์ด (= ์ต๋ ๋ ๋ฒจ)
ํธ๋ฆฌ์ ํน์ง
- ๊ทธ๋ํ์ ํ ์ข
๋ฅ์ด๋ค. '์ต์ ์ฐ๊ฒฐ ํธ๋ฆฌ'๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ๊ณ์ธต์ ํน์ฑ์ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ๋ DAG(Directed Acyclic Graph)์ ํ ์ข
๋ฅ์ด๋ค. (์ฌ์ดํด์ด ์๋ค.)
- ๋
ธ๋๊ฐ N๊ฐ์ธ ํธ๋ฆฌ๋ ํญ์ N-1๊ฐ์ ๊ฐ์ ์ ๊ฐ๋๋ค.
- ์์์ ๋
ธ๋์์ ์ด๋ค ๋
ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ ์ ์ผํ๋ค
- ํ ๊ฐ์ ๋ฃจํธ ๋
ธ๋๋ง์ด ์กด์ฌํ๋ฉฐ ๋ชจ๋ ์์ ๋
ธ๋๋ ํ ๊ฐ์ ๋ถ๋ชจ ๋
ธ๋๋ง์ ๊ฐ์ง๋ค.
- ์ํ๋ pre-order, in-order, post-order๋ก ์ด๋ฃจ์ด์ง๋ค. ์ด 3๊ฐ์ง ๋ชจ๋ DFS / BFS ์์ ์๋ค.
- ํธ๋ฆฌ๋ ์ด์งํธ๋ฆฌ, ์ด์ง ํ์ ํธ๋ฆฌ, ๊ท ํ ํธ๋ฆฌ(AVL ํธ๋ฆฌ, red-black ํธ๋ฆฌ), ์ด์ง ํ(์ต๋ํ, ์ต์ํ) ๋ฑ์ด ์๋ค.
ํธ๋ฆฌ์ ์ข
๋ฅ
ํธ๋ฆฌ vs ์ด์ง ํธ๋ฆฌ
- ์ด์ง ํธ๋ฆฌ
- ์์ ๋
ธ๋์ ๊ฐ์๊ฐ 0 ~ 2๊ฐ์ธ ํธ๋ฆฌ
- Binary Tree ์ฐธ์กฐ
- ํธ๋ฆฌ
- ์์ ๋
ธ๋์ ๊ฐ์์ ์ ํ์ด ์๋ ํธ๋ฆฌ
์ด์ง ํธ๋ฆฌ vs ์ด์ง ํ์ ํธ๋ฆฌ
- ์ด์ง ํ์ ํธ๋ฆฌ (Binary Search Tree)
- ๋ชจ๋ ๋
ธ๋๊ฐ ์๋์ ๊ฐ์ ํน์ ์์๋ฅผ ๋ฐ๋ฅด๋ ์์ฑ์ด ์๋ ์ด์ง ํธ๋ฆฌ
- ๋ชจ๋ ์ผ์ชฝ ์์๋ค โค n < ๋ชจ๋ ์ค๋ฅธ์ชฝ ์์๋ค
๊ท ํ ํธ๋ฆฌ vs ๋น ๊ท ํ ํธ๋ฆฌ
- ๊ท ํ ํธ๋ฆฌ
- O(logN) ์๊ฐ์ insert์ find๋ฅผ ํ ์ ์์ ์ ๋๋ก ๊ท ํ์ด ์ ์กํ ์๋ ํธ๋ฆฌ
- ๋ ๋-๋ธ๋ ํธ๋ฆฌ, AVL ํธ๋ฆฌ
์์ ์ด์ง ํธ๋ฆฌ vs ์ ์ด์ง ํธ๋ฆฌ vs ํฌํ ์ด์ง ํธ๋ฆฌ
- ์์ ์ด์ง ํธ๋ฆฌ (Complete BT)
- ํธ๋ฆฌ์ ๋ชจ๋ ๋์ด์์ ๋
ธ๋๊ฐ ๊ฝ ์ฐจ ์๋ ์ด์ง ํธ๋ฆฌ. ์ฆ, ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ๋ฒจ์ด ์์ ํ ์ฑ์์ ธ ์๋ค.
- ์ ์ด์ง ํธ๋ฆฌ (Full BT / Strictly BT)
- ๋ชจ๋ ๋
ธ๋๊ฐ 0๊ฐ ๋๋ 2๊ฐ์ ์์ ๋
ธ๋๋ฅผ ๊ฐ๋ ํธ๋ฆฌ
- ํฌํ ์ด์ง ํธ๋ฆฌ (Perfect BT)
- ์ ์ด์งํธ๋ฆฌ์ด๋ฉด์ ์์ ์ด์งํธ๋ฆฌ์ธ ๊ฒฝ์ฐ
์์ธํ ๋ด์ฉ์ Binary Tree ์ฐธ์กฐ
์ด์ง ํ(์ต์ํ, ์ต๋ํ)
- ์ต์ ํ(Min Heap)
- ํธ๋ฆฌ์ ๋ง์ง๋ง ๋จ๊ณ์์ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ๋บ ๋๋จธ์ง ๋ถ๋ถ์ด ๊ฐ๋ ์ฑ์์ ธ ์๋ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ฉฐ, ๊ฐ ๋
ธ๋์ ์์๊ฐ ์์๋ค์ ์์๋ณด๋ค ์๋ค.
- ์ฆ, key(๋ถ๋ชจ ๋
ธ๋) โค key(์์ ๋
ธ๋)์ธ ์์ ์ด์ง ํธ๋ฆฌ
- ๊ฐ์ฅ ์์ ๊ฐ์ ๋ฃจํธ ๋
ธ๋์ด๋ค.
- N๊ฐ๊ฐ ํ์ ๋ค์ด๊ฐ ์์ผ๋ฉด ๋์ด๋ log(N)์ด๋ค.
- ์ต๋ ํ(Max Heap)
- ์์๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค๋ ์ ์์๋ง ์ต์ํ๊ณผ ๋ค๋ฅด๋ค.
- ๊ฐ ๋
ธ๋์ ์์๊ฐ ์์์ ์์๋ณด๋ค ํฌ๋ค.
- ๋์ค์ ๋ฐ๋ก ์ ๋ฆฌํ ์์
ํธ๋ผ์ด (trie / ์ ๋์ฌ ํธ๋ฆฌ; Prefix Tree)
- n-์ฐจ ํธ๋ฆฌ(n-ary Tree)์ ๋ณํ
- ๊ฐ ๋
ธ๋์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ๋ผ์ ํธ๋ฆฌ๋ฅผ ์๋์ชฝ์ผ๋ก ์ํํ๋ฉด ๋จ์ด ํ๋๊ฐ ๋์จ๋ค.
- ์ ๋์ฌ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ณด๊ธฐ ์ํ ํํ ๋ฐฉ์์ผ๋ก, ๋ชจ๋ ์ธ์ด๋ฅผ ํธ๋ผ์ด์ ์ ์ฅํด ๋๋ ๋ฐฉ์์ด ์๋ค.
- ์ ํจํ ๋จ์ด ์งํฉ์ ์ด์ฉํ๋ ๋ง์ ๋ฌธ์ ๋ค์ ํธ๋ผ์ด๋ฅผ ํตํด ์ต์ ํ ๊ฐ๋ฅํ๋ค.
ํธ๋ฆฌ ๊ตฌํ ๋ฐฉ๋ฒ
ํธ๋ฆฌ๋ ๊ทธ๋ํ์ ํ ์ข
๋ฅ์ด๋ฏ๋ก ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ ๊ฐ๋ฅํ๋ค.
์ธ์ ๋ฐฐ์ด ์ด์ฉ
- 1์ฐจ์ ๋ฐฐ์ด์ ์์ ์ ๋ถ๋ชจ ๋
ธ๋๋ง ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ํธ๋ฆฌ๋ ๋ถ๋ชจ ๋
ธ๋๋ฅผ 0๊ฐ ๋๋ 1๊ฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ
- ๋ถ๋ชจ ๋
ธ๋๊ฐ 0๊ฐ : ๋ฃจํธ ๋
ธ๋
- ์ด์ง ํธ๋ฆฌ์ ๊ฒฝ์ฐ, 2์ฐจ์ ๋ฐฐ์ด์ ์์ ๋
ธ๋๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ์ด์ง ํธ๋ฆฌ๋ ๊ฐ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์์ ๊ฐ๋ ํธ๋ฆฌ์ด๊ธฐ์ ๊ฐ๋ฅ
- ex) A[i][0] โ left, A[i][1] โ right
์ธ์ ๋ฆฌ์คํธ ์ด์ฉ
- ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ โ ๋งํฌ๋ ๋ฆฌ์คํธ ๋ณํ
- ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ โ ๊ฐ์ค์น ๊ฐ ์ถ๊ฐ
Reference