let's get IT with DAVINA ๐ป
์๋ฃ๊ตฌ์กฐ/๋น์ ํ๊ตฌ์กฐ/ํธ๋ฆฌ ๋ณธ๋ฌธ
Tree ๋?
- ๋จ๋ฐฉํฅ ๊ทธ๋ํ์ ํ ๊ตฌ์กฐ
- ํ๋์ ๋ฟ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ง๊ฐ ์ฌ๋ฐฉ์ผ๋ก ๋ป์ ํํ
- ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ์๋์ ์๋ ํ๋ ์ด์์ ๋ฐ์ดํฐ์ ํ ๊ฐ์ ๊ฒฝ๋ก์ ํ๋์ ๋ฐฉํฅ์ผ๋ก๋ง ์ฐ๊ฒฐ๋ ๊ณ์ธต์ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ด์ํจ ์ ํ ๊ตฌ์กฐ๊ฐ ์๋๋ผ, ํ๋์ ๋ฐ์ดํฐ ์๋์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ์ ์๋ ๋น์ ํ ๊ตฌ์กฐ
- ํธ๋ฆฌ๊ตฌ์กฐ๋ ๊ณ์ธต์ ์ผ๋ก ํํ์ด ๋๊ณ , ์๋๋ก๋ง ๋ป์ด๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด(cycle)์ด ์์ต๋๋ค. → ์ฐ๊ฒฐ ๊ทธ๋ํ(Connected Graph)
์ฌ์ดํด
- ์์ ๋ ธ๋์์ ์ถ๋ฐํด ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ค์ ์์ ๋ ธ๋๋ก ๋์์ค๋ ๊ฒ
Tree์ ๊ตฌ์กฐ์ ํน์ง
- Root
- ํธ๋ฆฌ ๊ตฌ์กฐ์ ์์์ ์ด ๋๋ ๋ ธ๋
- Node
- ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ๋ชจ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ
- Parent Node (๋ถ๋ชจ ๋
ธ๋)
- ๋ ๋ ธ๋๊ฐ ์ํ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์๋์ ์ผ๋ก Root์์ ๊ฐ๊น์ด node
- Child Node (์์ ๋
ธ๋)
- ๋ ๋ ธ๋๊ฐ ์ํ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์๋์ ์ผ๋ก Root์์ ๋จผ node
- Leaf Node
- (๋๋ฌด์ ์๊ณผ ๊ฐ๋ค๊ณ ํ์ฌ) ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ ์ง์ ์ด๊ณ , ๋์ด์์ ์์ ๋ ธ๋๊ฐ ์๋ node
- Depth (๊น์ด)
- ํธ๋ฆฌ ๊ตฌ์กฐ์์๋ ๋ฃจํธ๋ก๋ถํฐ ํ์ ๊ณ์ธต์ ํน์ ๋ ธ๋๊น์ง์ ๊น์ด๋ฅผ ํํํ ์ ์๋ค.
- ๋ฃจํธ ๋ ธ๋๋ ์ง๋ฉด์ ์๋ ๊ฒ์ฒ๋ผ ๊น์ด๊ฐ 0 / B,C๋ ๊น์ด๊ฐ 1 / D,E,F,G์ ๊น์ด๋ 2
- Level (๋ ๋ฒจ)
- ํธ๋ฆฌ ๊ตฌ์กฐ์์ ๊ฐ์ ๊น์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ ธ๋๋ฅผ ๋ฌถ์ด์ ๋ ๋ฒจ์ด๋ผ๊ณ ํ๋ค.
- depth๊ฐ 0์ธ ๋ฃจํธ A์ ๋ ๋ฒจ์ 1 / depth๊ฐ 1์ธ B,C์ ๋ ๋ฒจ์ 2
- ๊ฐ์ ๋ ๋ฒจ์ ๋๋ํ ์๋ ๋ ธ๋๋ฅผ ํ์ ๋ ธ๋(Sibling Node)๋ผ๊ณ ํ๋ค.
- ๋์ด (Height)
- ํธ๋ฆฌ ๊ตฌ์กฐ์์ ๋ฆฌํ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฃจํธ๊น์ง์ ๋์ด๋ฅผ ํํํ ์ ์๋ค.
- ๊ฐ ๋ฆฌํ ๋ ธ๋์ ๋์ด๋ 0 / H,I,J,E,F์ ๋์ด๋ 0 / D์ G์ ๋์ด๋ 1 / B์ C์ ๋์ด๋ 2 / ๋ฃจํธ A์ ๋์ด๋ 3
- ์๋ธ ํธ๋ฆฌ (Sub Tree)
- ํธ๋ฆฌ ๊ตฌ์กฐ์ root์์ ๋ป์ด๋์ค๋ ํฐ ํธ๋ฆฌ์ ๋ด๋ถ์, ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ ์์ ํธ๋ฆฌ๋ฅผ ์๋ธ ํธ๋ฆฌ๋ผ๊ณ ํฉ๋๋ค.
- (D, H, I)๋ก ์ด๋ฃจ์ด์ง ์์ ํธ๋ฆฌ๋ ์๋ธ ํธ๋ฆฌ์ด๊ณ , (B, D, E)๋ (C, F, G, J)๋ ์๋ธ ํธ๋ฆฌ
Tree์ ์ค์ฌ์ฉ ์์
- ์ปดํจํฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
- ํ๋์ ํด๋(๋ฃจํ ํด๋, /)์์ ์์๋์ด, ๊ฐ์ง๋ฅผ ๋ป์ด๋๊ฐ๋ ๋ชจ์์
- ์๋์ปต ํ ๋๋จผํธ ๋์งํ
- ๊ฐ๊ณ๋ (์กฑ๋ณด)
- ์กฐ์ง๋ ๋ฑ๋ฑ
์ด์ง ํธ๋ฆฌ (Binary Tree)
- ์์ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋
ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ
- ์ด 2๊ฐ์ ์์ ๋ ธ๋๋ ์ผ์ชฝ ์์ ๋ ธ๋ & ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋
- ์๋ฃ์ ์ฝ์
, ์ญ์ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ๋๋๋ค.
- ์ ์ด์ง ํธ๋ฆฌ(Full binary tree)
- ๊ฐ ๋ ธ๋๊ฐ 0๊ฐ ํน์ 2๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ต๋๋ค.
- ์์ ์ด์ง ํธ๋ฆฌ(Complete binary tree)
- ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฐ๋ ์ฐจ ์์ด์ผ ํ๊ณ ,
- ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ ธ๋๋ ์ ๋ถ ์ฐจ์์ง ์์๋ ๋์ง๋ง, ์ผ์ชฝ์ด ์ฑ์์ ธ์ผ ํฉ๋๋ค.
- ํฌํ ์ด์ง ํธ๋ฆฌ(Perfect binary tree)
- ์ ์ด์ง ํธ๋ฆฌ && ์์ ์ด์ง ํธ๋ฆฌ
- ๋ชจ๋ ๋ฆฌํ ๋ ธ๋์ ๋ ๋ฒจ์ด ๋์ผํ๊ณ ,
- ๋ชจ๋ ๋ ๋ฒจ์ด ๊ฐ๋ ์ฑ์์ ธ ์๋ ํธ๋ฆฌ์ ๋๋ค.
- ์ ์ด์ง ํธ๋ฆฌ(Full binary tree)
์ด์ง ํ์ ํธ๋ฆฌ (Binary Search Tree)
- ์ด์ง ํ์(Binary Search) + ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ๋ฅผ ๊ฒฐํฉํ ์ด์งํธ๋ฆฌ
- ๊ฐ ๋ ธ๋์ ์ค๋ณต๋์ง ์๋ ํค(key)๊ฐ ์์ต๋๋ค.
- ๋ฃจํธ๋ ธ๋์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ ธ๋์ ํค๋ณด๋ค ์์ ํค๋ฅผ ๊ฐ๋ ๋ ธ๋๋ค๋ก ์ด๋ค์ ธ ์์ต๋๋ค.
- ๋ฃจํธ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ ํด๋น ๋ ธ๋์ ํค๋ณด๋ค ํฐ ํค๋ฅผ ๊ฐ๋ ๋ ธ๋๋ค๋ก ์ด๋ค์ ธ ์์ต๋๋ค.
- ์ข์ฐ ์๋ธํธ๋ฆฌ๋ ๋ชจ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ฌ์ผ ํฉ๋๋ค.
ํ๋ง๋๋ก,
๋ชจ๋ ์ผ์ชฝ ์์์ ๊ฐ์ด ๋ฃจํธ๋ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ๋ชจ๋ ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ด ๋ฃจํธ๋ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง๋ ํน์ง์ด ์๋ค!
์ด์ง ํ์ ํธ๋ฆฌ์ ํน์ง
- ๊ธฐ์กด ์ด์ง ํธ๋ฆฌ๋ณด๋ค ํ์์ด ๋น ๋ฅด๋ค๋ ์ฅ์
- ์ด์ง ํ์ ํธ๋ฆฌ๋ ๋์ด๊ฐ h(height)๋ผ๋ฉด, o(h)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋์ด ํจ์จ์ ์ธ ์ฐ์ฐ์ด ๊ฐ๋ฅ
<์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ๊ณผ์ >
1. ๋ฃจํธ ๋ ธ๋์ ํค์ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ๋น๊ตํฉ๋๋ค. ๋ง์ฝ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด๋ผ๋ฉด ํ์์ ์ข ๋ฃํฉ๋๋ค.
2. ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ํค๋ณด๋ค ์๋ค๋ฉด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ก ํ์์ ์งํํฉ๋๋ค.
3. ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ํค๋ณด๋ค ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ก ํ์์ ์งํํฉ๋๋ค.
โถ ์ด ๊ณผ์ ์ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํด ์งํํฉ๋๋ค. ๋ง์ฝ ๊ฐ์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด ๊ทธ๋๋ก ์ฐ์ฐ์ ์ข ๋ฃํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ํ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ์ต๋ ํธ๋ฆฌ์ ๋์ด(h)๋งํผ ํ์์ ์งํํฉ๋๋ค.
Tree Traversal (ํธ๋ฆฌ ์ํ)
- ํน์ ๋ชฉ์ ์ ์ํด ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๊ฒ
- ํธ๋ฆฌ ๊ตฌ์กฐ์์ ๋ ธ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์กฐํํ ๋์ ์์๋ ํญ์ ์ผ์ชฝ→์ค๋ฅธ์ชฝ
์ํ ๋ฐฉ์์ ๋๋๋ ์ด์
์ผ์ ์กฐ๊ฑด์ ์ํด ์ค๊ณ๋ ํธ๋ฆฌ๊ตฌ์กฐ๋ ์์ ๋ ธ๋์ ๋ํ ์กฐ๊ฑด์ด ๋ช ํํ๋ค๋ฉด ์ํ๋ ๊ฐ์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ง๋ง, ํธ๋ฆฌ ๊ตฌ์กฐ ์ ์ฒด๋ฅผ ํ์ํ ๋ ์๋๋ค. ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด์๋ ์ผ์ ํ ์กฐ๊ฑด์ด ํ์ํ๊ณ , ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ ์ง ๋ณด์ํ๊ฑฐ๋ ํน์ ๋ชฉ์ ์ ์ํด์๋ ์ํ ๋ฐฉ๋ฒ์ ๋ํ ์ ์๋ ํ์์ ์ผ๋ก ํ์ํฉ๋๋ค.
ํธ๋ฆฌ ์ํ์ 3๊ฐ์ง ๋ฐฉ๋ฒ ๐ฝ
์ ์ ์ํ (preorder traverse)
- Root → Left → Right
์ ์ ์ํ์์ ๊ฐ์ฅ ๋จผ์ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๋ ๋ฃจํธ
๋ฃจํธ์์ ์์ํด ์ผ์ชฝ์ ๋ ธ๋๋ค์ ์์ฐจ์ ์ผ๋ก ๋๋ฌ๋ณธ ๋ค,
์ผ์ชฝ์ ๋ ธ๋ ํ์์ด ๋๋๋ฉด ์ค๋ฅธ์ชฝ ๋ ธ๋๋ฅผ ํ์ํฉ๋๋ค.
์ฆ, ๋ถ๋ชจ ๋ ธ๋๊ฐ ์ ์ผ ๋จผ์ ๋ฐฉ๋ฌธ๋๋ ์ํ ๋ฐฉ์์ ๋๋ค.
์ ์ ์ํ๋ ์ฃผ๋ก ๋ถ๋ชจ ๋ ธ๋๊ฐ ๋จผ์ ์์ฑ๋์ด์ผ ํ๋ ํธ๋ฆฌ๋ฅผ ๋ณต์ฌํ ๋ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ค์ ์ํ (inorder traverse)
- Left → Root → Right
์ค์ ์ํ๋ ๋ฃจํธ๋ฅผ ๊ฐ์ด๋ฐ ๋๊ณ ์ํํฉ๋๋ค.
์ ์ผ ์ผ์ชฝ ๋์ ์๋ ๋ ธ๋๋ถํฐ ์ํํ๊ธฐ ์์ํ์ฌ,
๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋ ๋ ธ๋์ ์ํ๊ฐ ๋๋๋ฉด, ๋ฃจํธ๋ฅผ ๊ฑฐ์ณ, ์ค๋ฅธ์ชฝ์ ์๋ ๋ ธ๋๋ก ์ด๋ํ์ฌ ๋ง์ ํ์ํฉ๋๋ค.
๋ถ๋ชจ ๋ ธ๋๊ฐ ์๋ธ ํธ๋ฆฌ์ ๋ฐฉ๋ฌธ ์ค๊ฐ์ ๋ฐฉ๋ฌธ๋๋ ์ํ ๋ฐฉ์์ ๋๋ค.
์ค์ ์ํ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ค๋ฆ์ฐจ์์ผ๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฐ์ ๋๋ค.
ํ์ ์ํ (postorder traverse)
- Left → Right → Root
ํ์ ์ํ๋ ๋ฃจํธ๋ฅผ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ํํฉ๋๋ค.
์ ์ผ ์ผ์ชฝ ๋์ ์๋ ๋ ธ๋๋ถํฐ ์ํํ๊ธฐ ์์ํ์ฌ,
๋ฃจํธ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด ์ํํ ๋ค, ์ ์ผ ๋ง์ง๋ง์ ๋ฃจํธ๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค.
ํ์ ์ํ๋ ํธ๋ฆฌ๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ์์ ๋ ธ๋๊ฐ ๋จผ์ ์ญ์ ๋์ด์ผ ์์ ๋ ธ๋๋ฅผ ์ญ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
'DEV_IN > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊ณ ๋ฆฌ์ฆ์ด๋? (2) | 2023.02.24 |
---|---|
์๋ฃ๊ตฌ์กฐ/๋น์ ํ๊ตฌ์กฐ/๊ทธ๋ํ (2) | 2023.02.23 |
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ]ํ (2) | 2023.02.22 |
[์๋ฃ๊ตฌ์กฐ/์ ํ๊ตฌ์กฐ]์คํ (0) | 2023.02.22 |
์๋ฃ๊ตฌ์กฐ๋? (0) | 2023.02.22 |
Comments