๊ทธ๋ํ์ ์ผ์ข
์ผ๋ก, ์ ์ ๊ณผ ๊ฐ์ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ฐฐ์น ํํ๋ฅผ ์ถ์ํํ ์๋ฃ๊ตฌ์กฐ
์๋ก ๋ค๋ฅธ ๋ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธธ์ด ํ๋๋ฟ์ธ ๊ทธ๋ํ๋ฅผ ํธ๋ฆฌ
๋ผ๊ณ ์นญํ๋ค.
ํธ๋ฆฌ
์ ๊ตฌ์กฐ๋ โ๋ฐ์ดํฐ ์ ์ฅโ ์ ์๋ฏธ๋ณด๋ค๋ โ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ํ์โ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
ํธ๋ฆฌ์ ๊ฐ ๋
ธ๋๋ฅผ ์ฒด๊ณ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํ์ํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ๋
ธ๋๋ฅผ ํ์ํ๋ ์์์ ๋ฐ๋ผ ์ ์ ์ํ
, ์ค์ ์ํ
, ํ์ ์ํ
์ธ ๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค.
์ ์ ์ํ (preorder)
root โ left โ right
์์๋ก ์ํํ๋ ๋ฐฉ์์ด๋ค. ๊น์ด ์ฐ์ ์ํ ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์ค์ ์ํ (Inorder)
left โ root โ right
์์๋ก ์ํํ๋ ๋ฐฉ์์ด๋ค. ๋์นญ ์ํ ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
ํ์ ์ํ (Postorder)
right โ left โ root
์์๋ก ์ํํ๋ ๋ฐฉ์์ด๋ค.
์ฌ๋ฌ ๊ฐ์ง ์ ํ์ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ ์ค, ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ
์ด๋ค.
์ด์ง ํธ๋ฆฌ๋ 2๊ฐ ์ดํ์ ์์ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ค. (์์ ๋
ธ๋ ๊ฐฏ์: 0 or 1 or 2)
ํธํฅ ์ด์ง ํธ๋ฆฌ
๋ ํ๋์ ์ฐจ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ๋ฐฐ์ด(๋ฆฌ์คํธ)์ ๊ฐ์ ์ ํ ๊ตฌ์กฐ์ด๋ฏ๋ก leaf node ํ์ ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํด์ผ ํ๋ค๋ ๋จ์ ์ด ์์ด ํจ์จ์ ์ด์ง ๋ชปํ๋ค.O(n)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.ํฌํ ์ด์ง ํธ๋ฆฌ
๋ leaf node๋ฅผ ์ ์ธํ ๋ชจ๋ ๋
ธ๋์ ์ฐจ์๊ฐ 2๊ฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ์ด ๊ฒฝ์ฐ ํด๋น ์ฐจ์์ ๋ช ๊ฐ์ ๋
ธ๋๊ฐ ์กด์ฌํ๋์ง ๋ฐ๋ก ์ ์ ์์ผ๋ฏ๋ก ๋
ธ๋์ ๊ฐ์๋ฅผ ํ์
ํ ๋ ์ฉ์ดํ๋ค.์์ ์ด์ง ํธ๋ฆฌ
๋ ๋ชจ๋ ๋
ธ๋๊ฐ ์ผ์ชฝ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์์ฑ๋๋ ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.heap
์ ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข
์ด๋ค.์์์ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํธ๋ฆฌ
a/b*c*d+e
ab/c*d*e+
+**/abcde
ํ์์ ์ํ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ ์ด์ง ํ์ ํธ๋ฆฌ๊ฐ ์๊ฒผ์๊น?
๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ํ๋ ๊ฐ์ ์ฐพ์ ๋๊น์ง ํ์ฌ์ ๋
ธ๋๊ฐ๋ณด๋ค ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์์ผ๋ฉด ์ผ์ชฝ์ผ๋ก, ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์์ง์ธ๋ค.
์ด๋ ๊ฒ ์ํ๋ ๊ฐ์ ์ ์ฒด ์์ญ์์ ํ์ํ์ง ์๊ณ , ๋ฐ์ผ๋ก ๋๋ ํ์ํ๋ฏ๋ก ๋ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
O(logN)
์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๊ฐ ๋จ๊ณ์์ ํ์ ๋ฒ์๊ฐ ๋๋ต ์ ๋ฐ์ผ๋ก ์ค๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ์ด์ง ํ์ ํธ๋ฆฌ๊ฐ ๊ท ํ์ด ์กํ ์๋ค๋ฉด. ์ฆ, ์์ ์ด์ง ํธ๋ฆฌ๋ผ๋ฉด.. ํธ๋ฆฌ์ ๋์ด๋ logN์ด ๋๋ฉฐ, ์ด์ ๋ฐ๋ผ ํ์์ ์์๋๋ ์๊ฐ ๋ณต์ก๋๋ O(logN)์ด๋ค.
์ logN ์ผ๊น?
์ด์ด ์ข์ผ๋ฉด ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์ค๊ฐ๊ฐ๊ณผ ๋์ผํด์ ํ์์ด ๋๋์ง๋ง ์ต์
์ ๊ฒฝ์ฐ ๋จ์ ๋ฐ์ดํฐ๊ฐ ํ๋๊ฐ ๋ ๋๊น์ง ํ์์ ๋ฐ๋ณตํ๋ค. ์ด๋ฅผ ๊ณ ๋ คํด ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด๋ณด์.
ํ์ง๋ง ๋ถ๊ท ํ ํธ๋ฆฌ์ ๊ฒฝ์ฐ(์ต์ ), ๋์ด๊ฐ N์ด ๋์ด ์๊ฐ ๋ณต์ก๋๊ฐ O(N)๊น์ง๋ ๋ ์ ์๋ค.
โ O(logN)์ ์ฑ๋ฅ ๋ณด์ฅ์ ์ํด AVL ํธ๋ฆฌ, RB ํธ๋ฆฌ ๋ฑ์ฅ
ํ์ชฝ์ผ๋ก ์น์ฐ์ง ํธํฅ ์ด์ง ํธ๋ฆฌ๊ฐ ๋๋ฉด ํธ๋ฆฌ์ ๋์ด๊ฐ ๋์์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ ์ค์ค๋ก ๋์ด ๊ท ํ์ ์ ์งํ๋ AVL, RB ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
Red-Black Tree
์ ๊ธ์์ ์ ๋ฆฌํ rb tree
AVL Tree
O(logN)
์ด๋ค.Balance Factor(BF)
Balance Factor (k) =height(left(k))
-height(right(k))
์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด์์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด๋ฅผ ๋บ ๊ฐ
- BF๊ฐ 1์ด๋ฉด ์ผ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ณด๋ค ํ๋จ๊ณ ๋๋ค.
- BF๊ฐ 0์ด๋ฉด ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด = ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด
- BF๊ฐ -1์ด๋ฉด ์ผ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ณด๋ค ํ๋จ๊ณ ๋ฎ๋ค.
Red-Black & AVL ์ฐจ์ด์
AVL ํธ๋ฆฌ๋ ๋์ฑ ์๊ฒฉํ ๊ท ํ์ ์ด๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ rb tree๋ณด๋ค ๋ ๋น ๋ฅธ ์กฐํ ์ ๊ณต
AVL ํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋์ ๋ํด BF๋ฅผ ์ ์ฅํ๋ฏ๋ก ๋ ธ๋ ๋น int ์ ์ฅ ํ์
RB ํธ๋ฆฌ๋ ์๋์ ์ผ๋ก ๋์จํ ๊ท ํ์ผ๋ก ์ธํด ํ์ ์ด ๊ฑฐ์ ์ด๋ฃจ์ด์ง์ง ์์ AVL tree ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฝ์ , ์ญ์ ์์ ์ ์ํ
RB ํธ๋ฆฌ๋ ์๊น ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ ธ๋๋น 1๋นํธ์ ์ ๋ณด๋ง ํ์ํฉ๋๋ค. (red or black: ํ๋๊ทธ ๋ฐ์ ๋ง ์ํค๋ฉด ๋จ)
RB ํธ๋ฆฌ๋ ๋งต, C++์ ๋ฉํฐ๋งต, Java treeMap ๋ฑ ๋๋ถ๋ถ์ ์ธ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ, AVL ํธ๋ฆฌ๋ ๋ ๋น ๋ฅธ ๊ฒ์์ด ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ
Binary Tree
๋ ์์ ๋
ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ธ ๋
ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ์ด๊ณ ,
Binary Search Tree
๋ ์ด์ง ํ์๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด์ง ํ์์ ํจ์จ์ ์ธ ํ์ ๋ฅ๋ ฅ์ ์ ์งํ๋ฉด์, ๋น๋ฒํ ์๋ฃ ์
๋ ฅ๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
์ด์ง ํ์ ํธ๋ฆฌ๋ ์ผ์ชฝ ํธ๋ฆฌ์ ๋ชจ๋ ๊ฐ์ ๋ฐ๋์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์์์ผ ํ๊ณ , ์ค๋ฅธ์ชฝ ํธ๋ฆฌ์ ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์ปค์ผ ํ๋ ํน์ง์ด ์๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ์ ํธ๋ฆฌ์ ๋์ด์ ์ํฅ์ ๋ฐ์ ๋์ด๊ฐ h์ผ ๋ ์๊ฐ ๋ณต์ก๋๋ O(h)์ด๋ฉฐ, ํธ๋ฆฌ์ ๊ท ํ์ด ํ์ชฝ์ผ๋ก ์น์ฐ์ณ์ง ๊ฒฝ์ฐ worst case๊ฐ ๋๋ค. ์ด๋ฐ worst case๋ฅผ ๋ง๊ธฐ ์ํด ๋์จ ๊ธฐ๋ฒ์ด rb-tree
์ด๋ค.
rb-tree๋ bst๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํธ๋ฆฌ ํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, bst์ ์ฝ์ , ์ญ์ ์ฐ์ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค.
bst๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ bst์ ํน์ง์ ๋ชจ๋ ๊ฐ๋๋ค.
๋ ธ๋์ child๊ฐ ์์ ๊ฒฝ์ฐ, child๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ nil ๊ฐ์ ์ ์ฅํ๋ค. ์ด๋ฌํ nil๋ค์ leaf node๋ก ๊ฐ์ฃผํ๋ค.
๐ก์ฐ์ฐ์ ์ฐ์ ์์๋ ์ด๋ป๊ฒ ๋๋๊ฐ?
Q. duplicates๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ node_t
์ count
๋ผ๋ ์์ฑ์ ์ถ๊ฐํด์ผ ํ๋ค. ํ์ง๋ง ํ์ฌ ํ๋ก์ ํธ์ ์ ์ฝ์ฌํญ์ผ๋ก "rbtree.c"๋ง ์์ ํด์ผ ํ๋๋ฐ, ์ ๋ง๋ก node_t
๋ฅผ ์์ ํ์ง ์๊ณ ์ค๋ณต ์์๋ฅผ ์ฒ๋ฆฌํ๋ผ๋ ๊ฒ์ธ๊ฐ?
A. ๊ฐ๋ฅํ๋ค. ์ ๋ ฌ๋ list๋ฅผ [1,1, 2, 2, 2, 3]
๊ณผ ๊ฐ์ด ๊ตฌํํ ์๋ ์๊ณ {1: 2๊ฐ, 2: 3๊ฐ, 3: 1๊ฐ}
๋ก ๊ตฌํํ ์๋ ์์ต๋๋ค๋ง, ์์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ผ๋ ์ด์ผ๊ธฐ์ด๋ค.