ALGORITHM_ํธ๋ฆฌ ( Tree )
๐ ALGORITHM
๐ ํธ๋ฆฌ ( Tree )
ํธ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ ?
ํธ๋ฆฌ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ ์ํด ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ด๋ค.
๋น์ ํ ๊ตฌ์กฐ์ด๋ฉฐ ์์๋ค ๊ฐ์ ๊ณ์ธต๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ณ์ธตํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์์ ์์์์ ํ์ ์์๋ก ๋ด๋ ค๊ฐ๋ฉด์ ํ์ฅ๋๋ ํธ๋ฆฌ(๋๋ฌด)๋ชจ์์ ๊ตฌ์กฐ์ด๋ค.
ํธ๋ฆฌ์ ์ฉ์ด์ ๋ฆฌ
- ๋
ธ๋ ( node )
ํธ๋ฆฌ์ ์์ - ๊ฐ์ ( edge, branch, link )
๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ผ๋ก ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ - ๋ฃจํธ ๋
ธ๋ ( root node )
ํธ๋ฆฌ์ ์์ ๋ ธ๋์ธ ์ต์์ ๋ ธ๋ - ๋ฆฌํ ๋
ธ๋ ( leaf node )
์์์ด ์๋ ๋ ธ๋, ๋งจ ๋ฐ์ ์๋ ๋ ธ๋ - ํ์ ๋
ธ๋ ( sibling node )
๊ฐ์ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๋ค - ์กฐ์ ๋
ธ๋
๊ฐ์ ์ ๋ฐ๋ผ ๋ฃจํธ ๋ ธ๋๊น์ง ์ด๋ฅด๋ ๊ฒฝ๋ก์ ์๋ ๋ชจ๋ ๋ ธ๋๋ค - ์๋ธ ํธ๋ฆฌ ( subtree ) = ๋ถํธ๋ฆฌ
๋ถ๋ชจ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋์์ ๋ ์์ฑ๋๋ํธ๋ฆฌ -
์์ ๋ ธ๋
์๋ธ ํธ๋ฆฌ์ ์๋ ํ์ ๋ ๋ฒจ์ ๋ ธ๋๋ค - ์ฐจ์ ( degree )
- ๋ ธ๋์ ์์ : ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์์ ๋ ธ๋์ ์ (B์ ๋ ธ๋ : 3, C์ ๋ ธ๋ : 1)
- ํธ๋ฆฌ์ ์ฐจ์ : ํธ๋ฆฌ์ ์๋ ๋ ธ๋์ ์ฐจ์ ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ (ํธ๋ฆฌ T์ ์ฐจ์ : 3)
- ๋์ด
- ๋ ธ๋์ ๋์ด : ๋ฃจํธ์์ ๋ ธ๋์ ์ด๋ฅด๋ ๊ฐ์ ์ ์, ๋ ธ๋์ ๋ ๋ฒจ (B์ ๋์ด : 1, F์ ๋์ด : 2)
- ํธ๋ฆฌ์ ๋์ด : ํธ๋ฆฌ์ ์๋ ๋ ธ๋์ ๋์ด ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ (ํธ๋ฆฌ T์ ๋์ด : 3)
์ด์งํธ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ ?
์ฐจ์๊ฐ 2์ธ ํธ๋ฆฌ
๊ฐ ๋
ธ๋๊ฐ ์์ ๋
ธ๋๋ฅผ ์ต๋ํ 2๊ฐ ๊น์ง๋ง ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ
๋ชจ๋ ๋
ธ๋๋ค์ด ์ต๋ 2๊ฐ์ ์๋ธํธ๋ฆฌ๋ฅผ ๊ฐ๋ ํน๋ณํ ํํ์ ํธ๋ฆฌ
์ด์งํธ๋ฆฌ์ ํน์ฑ
๋์ด i ( ๋ ๋ฒจ i )์์์ ๋
ธ๋์ ์ต๋ ๊ฐ์๋ 2^i๊ฐ
๋์ด๊ฐ h์ธ ์ด์ง ํธ๋ฆฌ๊ฐ ๊ฐ์ง ์ ์๋ ๋
ธ๋์ ์ต์ ๊ฐ์๋ (h+1)๊ฐ ์ด๋ฉฐ, ์ต๋ ๊ฐ์๋ (2^(h+1)-1) ๊ฐ๊ฐ ๋๋ค.
์ด์งํธ๋ฆฌ์ ์ข ๋ฅ
ํฌํ ์ด์ง ํธ๋ฆฌ ( Full Binary Tree )
- ๋ชจ๋ ๋ ๋ฒจ์ ๋ ธ๋๊ณผ ํฌํ ์ํ๋ก ์ฐจ ์๋ ์ด์ง ํธ๋ฆฌ
- ๋์ด๊ฐ h ์ผ ๋, ์ต๋ ๋ ธ๋ ๊ฐ์์ธ (2^(h+1)-1)์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ด์ง ํธ๋ฆฌ
์์ ์ด์ง ํธ๋ฆฌ ( Complete Binary Tree )
- ํฌํ ์ด์ง ํธ๋ฆฌ์ ๋ ธ๋ ๋ฒํธ 1๋ฒ ๋ถํฐ n๋ฒ ๊น์ง ๋น ์๋ฆฌ๊ฐ ์๋ ์ด์ง ํธ๋ฆฌ
ํธํฅ ์ด์ง ํธ๋ฆฌ ( Skewed Binary Tree )
- ๋์ด h์ ๋ํ ์ต์ ๊ฐ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฉด์ ํ์ชฝ ๋ฐฉํฅ์ ์์ ๋ ธ๋๋ง์ ๊ฐ์ง ์ด์ง ํธ๋ฆฌ
์ด์งํธ๋ฆฌ ์ํ
ํธ๋ฆฌ์ ๋
ธ๋๋ค์ ์ฒด๊ณ์ ์ผ๋ก ๋ฐฉ๋ฌธ
-
์ ์ ์ํ ( preorder traversal ) : VLR
๋ถ๋ชจ ๋ ธ๋ ๋ฐฉ๋ฌธ ํ ์์๋ ธ๋๋ฅผ ์ข,์ฐ ์์๋ก ๋ฐฉ๋ฌธ -
์ค์ ์ํ ( inorder traversal ) : LVR
์ผ์ชฝ ์์๋ ธ๋, ๋ถ๋ชจ๋ ธ๋, ์ค๋ฅธ์ชฝ ์์๋ ธ๋ ์์ผ๋ก ๋ฐฉ๋ฌธ -
ํ์ ์ํ ( postorder traversal ) : LRV
์์๋ ธ๋๋ฅผ ์ข์ฐ ์์๋ก ๋ฐฉ๋ฌธํ ํ, ๋ถ๋ชจ๋ ธ๋ ๋ฐฉ๋ฌธ
์ด์งํธ๋ฆฌ์ ํํ
๋ฐฐ์ด์ ์ฌ์ฉํด์ ์ด์ง ํธ๋ฆฌ๋ฅผ ํํํ ์ ์๋ค.
๋ฃจํธ ๋ฒํธ๋ฅผ 1๋ก ์ง์ ํ๊ณ ๋๋จธ์ง ๋
ธ๋๋ฅผ ์์๋๋ก ์ ์ฅํ๋ค.
- ๋
ธ๋ ๋ฒํธ์ ์ฑ์ง
- ๋ ธ๋ ๋ฒํธ๊ฐ i ์ธ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋ฒํธ : i/2
- ๋ ธ๋ ๋ฒํธ๊ฐ i ์ธ ๋ ธ๋์ ์ผ์ชฝ ์์ ๋ ธ๋ ๋ฒํธ : 2*i
- ๋ ธ๋ ๋ฒํธ๊ฐ i ์ธ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋ ๋ฒํธ : 2*i + 1
- ๋ ๋ฒจ n์ ๋
ธ๋ ๋ฒํธ ์์ ๋ฒํธ : 2^n
- ๋์ด๊ฐ h์ธ ์ด์ง ํธ๋ฆฌ ์ฑ์ง
- ๋ ๋ฒจ i์ ์ต๋ ๋ ธ๋ ์ : 2^i
- ๋ชจ๋ ๋ ธ๋์ ์ : 2^(h+1) - 1
- ๋ฐฐ์ด์ ํฌ๊ธฐ : 2^(h+1)
๋ฐฐ์ด์ ์ด์ฉํ ์ด์ง ํธ๋ฆฌ์ ํํ์ ๋จ์
์ฌ์ฉํ์ง ์๋ ๋ฐฐ์ด ์์์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ญ๋น ๋ฐ์
์๋ก์ด ๋
ธ๋๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ๊ธฐ์กด ๋
ธ๋๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ์ด๋ ค์ ๋นํจ์จ์
๐ ์ฐธ์กฐ
https://ahnyezi.github.io/java/javastudy-5-tree/