โ 1. ์ด์ง ํ์ ํธ๋ฆฌ
(1) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ๊ฐ๋
- ํน์ ๋ฐ์ดํฐ์ ํจ๊ณผ์ ์ธ ๊ฒ์์ ์ํด ์ ํ์ ์ ๊ฐ์ง๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
- ํน์ ๋ฐ์ดํฐ์ ๊ฒ์๊ณผ ๋ ธ๋์ ์ฝ์ , ์ญ์ ์ฒ๋ฆฌ์ ํจ๊ณผ์ ์ธ ์ด์ง ํธ๋ฆฌ์ด๋ค.
- BST: ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ๋, ๋ฐ์ดํฐ์ ํ์์ ๊ณ ๋ คํ์ฌ ๊ตฌ์ฑ(์ค๊ณ)ํ๋ฏ๋ก ํ์์ ์ต์ ํ๋ ์ด์ง ํธ๋ฆฌ์ด๋ค.
- ํค: ํ์, ์ฝ์ , ์ญ์ ์ฐ์ฐ์์ ๋น๊ต์ ๋์์ด ๋๋ ๊ฐ์ด๋ค.
- ( ์ฆ, ์ด์ง ํธ๋ฆฌ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ํํ๋ ๊ฐ, ํน์ ๋ ธ๋๋ฅผ ํน์ ํ ์ ์๋ ๊ฐ ex.์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ๋ฑ )
(2) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ์ ํ์ ๋๋ ํน์ง

- ๋ชจ๋ ๋ ธ๋์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ํด๋น ๋ ธ๋๋ณด๋ค ์์ ๊ฐ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ํฐ ๊ฐ์ด ๋ค์ด๊ฐ๋ ์ ํ์ ์ ๊ฐ์ง.
(3) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ์ค์์ํ
- ์ด์ง ํ์ ํธ๋ฆฌ์์ ์ค์ ์ํ๋ฅผ ํ๋ฉด ์ ๋ ฌ๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ด์ ํจ์จ์ ์.
- ์ฝ๊ฒ๋งํด, ์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ = ์์ ๊ฐ, ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ = ํฐ ๊ฐ์ ๊ฒฝ์ฐ ์ค์์ํ๋ฅผ ๋๋ฆฌ๋ฉด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๋จผ์ ์ํํ ๋ค ๋ฃจํธ๋ฅผ ์ํํ๊ณ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ํํ๊ฒ ๋๋๋ฐ, ์ด๊ฒ์ด ๊ฒฐ๊ตญ ์์๊ฐ -> ์ค๊ฐ๊ฐ -> ํฐ ๊ฐ ์์ผ๋ก ์ ๋ ฌ์ด ๋ ์ํ๋ก ์ถ๋ ฅ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
(4) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ์ํ ์ฐ์ฐ
[ BST - ๋ ธ๋ ์ ์ ]

- ์์ key ๊ฐ์ uniqueํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ฉฐ, ๋ฐ์ดํฐ ํ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ํ๋์.
[ BST - ์ค์ ์ํ ์ฐ์ฐ ]
![]() |
![]() |
- (1) root ๋ถํฐ left ๊ฐ null ์ผ ๋ ๊น์ง left ์ ์ ๋ ธ๋๋ก ๋ด๋ ค๊ฐ.
- (2) left ์ ์ ๋ ธ๋๊ฐ null ์ธ ๊ฒฝ์ฐ ์ฌ๊ท๋ก ๋์์ printf() ๋ฅผ ํตํด "1" ์ด ์ํ ๋จ.
- (3) ์ดํ, right ๋ ธ๋๋ก ๋ด๋ ค๊ฐ๋๋ฐ, null ์ธ ๊ฒฝ์ฐ ์ด์ ์ฌ๊ท์ธ "2" ๋ก ๋์๊ฐ๋ ๊ตฌ์กฐ์ด๋ค.
- (4) ์ด๋ฌํ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ฉด 1 -> 2 -> 3 -> 5 -> 4 -> 6 -> 7 -> 8 -> 9 ์ ์ํ ์์๊ฐ ๋ ๊ฒ์.
(5) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ํ์ ์ฐ์ฐ ( ํน์ ๊ฐ ์ฐพ๊ธฐ )

- (1) searchBST(): ํ์ ๋งค๊ฐ๋ณ์๋ก root , key (๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ํค) ๋ฅผ ๊ฐ์ด ๋๊น.
- (2) if(root == NULL): root ๊ฐ ๋ง์ฝ null ์ธ ๊ฒฝ์ฐ์๋ ์๋ฌด ๊ฐ๋ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก, ์์ธ์ฒ๋ฆฌ
- (3) if(key == root -> key): root(ํ์ฌ์์น) ์ key ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด๋ฏ๋ก ๋ฐ๋ก ๋ฆฌํด์ ํด์ฃผ๋ฉด ๋จ.
- (4) else if(key < root -> key): ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, key ๊ฐ๊ณผ root(ํ์ฌ ์์น) ๊ฐ๊ณผ ๋น๊ต๋ฅผ ํ๊ณ ๋ง์ฝ ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ ์๋ค๋ฉด, searchBST() ํจ์๋ฅผ ์ฌ๊ท ํธ์ถ ํ ๋งค๊ฐ๋ณ์๋ก left ๋ ธ๋ ํฌ์ธํฐ์ key ๊ฐ์ ๊ฐ์ด๋๊น.
- (5) else if(key > root -> key): ๋ง์ฝ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, key ๊ฐ๊ณผ root(ํ์ฌ ์์น) ๊ฐ๊ณผ ๋น๊ต ํ ์ฐพ๊ณ ์ ํ๋ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ์ด๋ฒ์ right ํฌ์ธํฐ์ key ๊ฐ์ ์ฌ๊ทํจ์๋ก ๋๊น.
- ํต์ฌ์ ํด๋น ๊ณผ์ ์ด ๋ฐ๋ณต์ด ๋๋ฉด, ํฐ ์ ์์ ์ ๋น๊ต๋ฅผ ํตํด ์ํ๋ ๊ฐ์ ์ฐพ์ ๋ ๊น์ง ๋ด๋ ค๊ฐ ์ ์์.
(6) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ์ฝ์ ์ฐ์ฐ
![]() |
![]() |
- (1) insertBST(BSTnode* root, char key): root ์ ๋ด๊ฐ ์ฝ์ ํ๊ณ ์ ํ๋ key ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋จ.
- (2) BSTnode* newNode = (BSTnode*)malloc(sizeof(BSTnode)): BSTnode(์ค์ ์ด์ง ํ์ ํธ๋ฆฌ์ rootNode) ์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๋๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ด์ newNode์ ํ ๋นํ๋ ์์ ์. ์ด๋ ๊ฒ ํ๋ ์ด์ ๋, ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํด๋น ๋ ธ๋์ ๋ด๊ฐ ์ฐพ๋ key ๋ฅผ ๋ฃ๊ฒ ๋๋ฉฐ, ํด๋น newNode ๋ ์ฝ์ ๋ฐ ๋น๊ต ๋์์ผ๋ก ์ค์ ์ด์ง ํ์ ํธ๋ฆฌ์ ๋น๊ต ํ ์ฝ์ ์ด ๋ ์์ ์.
- (3) newNode -> key = key, newNode -> left = newNode -> right = NULL: ์๋ก์ด ๋น๊ต ๋ฐ ์ฝ์ ๋ ธ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํจ.
- (4) if(root == NULL): ๋ง์ฝ root ๊ฐ NULL์ธ ๊ฒฝ์ฐ root ์๋ ์๋ก์ด newNode ๋ฅผ ๋ฃ์ผ๋ฉด ๋์. ( ์ด์ฐจํผ ์ฝ์ ๋ ๋ ธ๋๊ธฐ ๋๋ฌธ )
- (5) ptr = root: BSTnode* ptr; ์ root ๋ฅผ ๋ฃ์ด์ ํด๋น ํจ์ ๋ด๋ถ์์๋ ptr(์ค์ ์ด์ง ํ์ ํธ๋ฆฌ)์ newNode๊ฐ ๋น๊ต๊ฐ๋จ.
- (6) while(ptr): ptr(์ค์ ์ด์ง ํ์ ํธ๋ฆฌ ์์น) ์ด NULL ์ด ์๋ ๋๊น์ง(์ฆ, ์ ํจํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํฌ ๋๊น์ง) ๋ฐ๋ณต๋ฌธ ์ํ
- (7) if(key == ptr -> key): ์ฝ์ ํ ํค๊ฐ ํ์ฌ ๋ ธ๋์ ํค์ ๊ฐ์ผ๋ฉด, BST์์ ์ค๋ณต๋ ํค๋ ํ์ฉ๋์ง ์์ผ๋ฏ๋ก ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ์ฝ์ ์ ์ทจ์ํ๊ณ ํ์ฌ ๋ฃจํธ๋ฅผ ๋ฐํํ๋ค.( ๋์ผํ ํค๊ฐ์ด ์กด์ฌํ๋ฉด ์ฝ์ ํ๋๋ฐ ์๋ฏธ๊ฐ ์์ผ๋๊น ์ค๋ณตํ์ฉ์ ์ํจ. )
- (8) else if(key < ptr -> key): newNode์ key ์ฆ, ์ฐพ๊ณ ์ ํ๋ ํค๊ฐ ํ์ฌ ๋ ธ๋์ ํค๋ณด๋ค ์์ผ๋ฉด, BST ๊ท์น์ ๋ฐ๋ผ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ก ์ด๋์ ์ํด.
- (9) if(ptr -> left == NULL): ๋ง์ฝ ptr ์ left ๊ฐ NULL ์ธ ๊ฒฝ์ฐ ํด๋น ์์น์ newNode ๋ฅผ ์ฝ์ ํ๊ณ return ๋ฐ๋ณต ์ข ๋ฃ
- (10) else { ptr = ptr -> left }: ์๋ ๊ฒฝ์ฐ ptr ์ left ๋ก ์ด๋
- (11) else: 8 ๋ฒ์ else if ์ฆ, newNode key ๊ฐ ํ์ฌ key ๋ณด๋ค ์์ง ์์ ๊ฒฝ์ฐ์๋, ํฐ ๊ฒฝ์ฐ๋๊น ptr ์ right ๊ฐ NULL ์ธ์ง ํ์ธ ํ๊ณ , NULL ์ด๋ฉด ํด๋น right ์ newNode ๋ฅผ ๋ฃ์ด์ฃผ๊ณ , NULL ์ด ์๋๋ฉด ptr ์ right ๋ก ์ด๋์ ์ํด.

- ํต์ฌ: ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด์ง ํ์ ํธ๋ฆฌ์ root ๋ ธ๋๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋๋๋ฐ, ์ด ๋ ธ๋๋ ์ฝ์ ํ ๋์์ ๋ ธ๋๊ฐ ๋๊ณ , ์ดํ ๋ฐ๋ณต ์์ ์ ํตํด ์ด์ง ํ์ ํธ๋ฆฌ์ root ๋ ธ๋์ ๋น๊ต(ํฌ๊ณ ์๊ณ )ํ๋ฉด์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ ๊ณผ์ ์.
(7) ์ด์ง ํ์ ํธ๋ฆฌ(BST) - ์ญ์ ์ฐ์ฐ

- ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ํน์ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ ์ฐ์ฐ์ ๊ดํ ๋ด์ฉ์.
- (1) ์ญ์ ๋ key ๋ฅผ ๋ฐ์์ root ๋ถํฐ ์๋๋ก ์ด์ง ํ์์ ๊ท์น์ ๋ง๊ฒ ํ์์ ํ๊ฒ ๋จ.
- (2) ์ญ์ ๋ key ์ ๋์ผํ key ๋ฅผ ๋ง๋๊ฒ ๋๋ฉด ํด๋น ๋ ธ๋๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ก ๋ถํฐ ๋์ด์ฃผ๊ฒ ๋๋ฉด ์ญ์ ๊ฐ ๋ ์ํ๊ฐ ๋จ.
- (3) ์ดํ, ์ญ์ ๋ ๋ ธ๋์ ์์น๊ฐ leafNode ์ธ ๊ฒฝ์ฐ ๋ ์ด์์ ์ฐ์ฐ์ ์์.
- (4) ํ์ง๋ง, leftNode ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ญ์ ๋๋ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ด๋๋ ์์ ๋ ธ๋๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ์ 2๊ฐ์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ง์ฝ 1๊ฐ์ธ ๊ฒฝ์ฐ์๋ ๋จ์ํ ์ญ์ ํ ์ญ์ ๋ ๋ ธ๋์ ๋ถ๋ชจ์ ์์์ ์ฐ๊ฒฐํ๋ฉด ๋๋์ง๋ง, 2๊ฐ์ธ ๊ฒฝ์ฐ๋ ์์ ๋ ธ๋์ ๊ฐ์ ๊ธฐ์ค์ ์ ํด์ ํด๋น ์ญ์ ๋๋ ๋ ธ๋์ ์ฑ์์ค์ผ ํ๋ค.
- (5) ํด๋น ๊ธฐ์ค์ ์ญ์ ๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ, ์ผ์ชฝ ์๋ธํธ๋ฆฌ ๋ ๊ฐ์ง์ ๊ธฐ์ค์ด ์์.
- ์ผ์ชฝ ์๋ธํธ๋ฆฌ ๊ธฐ์ค: ์ญ์ ๋ ๋ ธ๋ ์์น๋ก ์ผ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ
- ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๊ธฐ์ค: ์ญ์ ๋ ๋ ธ๋ ์์น๋ก ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ
- ์ด๋ฌํ ๊ธฐ์ค์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํ ํ ๋ ์ ํ๋ ๋ถ๋ถ์ผ๋ก ๋ณผ ์ ์์.
[ ์ด์ง ํ์ ํธ๋ฆฌ - ์ญ์ ์ฐ์ฐ ( ์ค์ ๊ตฌํ ) ]
![]() |
![]() |
![]() |
- (1) ์์ ๋ ธ๋๊ฐ 0๊ฐ์ธ ๊ฒฝ์ฐ: ์ญ์ ๋๋ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ 0๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ ๋ ธ๋ ์ด๋ฏ๋ก, ์กฐ๊ฑด๋ฌธ์ ๋ณด๋ฉด ์ญ์ ๋๋ ๋ ธ๋์ ์์ ๋ ธ๋๋ค์ด NULL ์ธ ๊ฒฝ์ฐ ํด๋น ๋ถ๋ชจ ๋ ธ๋๋ก ๋ถํฐ ์ฐ๊ฒฐ์ ๋๊ฒ ๋จ. ( ๋งค์ฐ ๊ฐ๋จํจ )
- (2) ์์ ๋ ธ๋๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ: ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๊ธฐ์ค์ผ๋ก ํ๋ฉด, ๊ฐ์ฅ ์์ ๊ฐ์ ์ญ์ ๋๋ ๋ ธ๋๋ก ์ฌ๋ฆฌ๋ฉด ๋๋๊ณ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ฉด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ญ์ ๋๋ ๋ ธ๋๋ก ์ฌ๋ ค์ฃผ๋ฉด ํด๊ฒฐ์ด ๋๋ค. ์ดํ, ๋ ธ๋๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ฉด ๊ทธ ์๋ฆฌ๋ ๋น์ด์ง ์๋ฆฌ๊ฐ ๋๋ฏ๋ก ์ฌ๋ผ๊ฐ ๊ธฐ์กด ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ์ ํด์ฃผ๋ฉด ๋๋ค.
- (3) ์์ ๋ ธ๋๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ: ์ญ์ ํ๋ ค๋ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋ค ์ญ์ ๋ ๋ ธ๋์ ๊ธฐ์กด ์์ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๊ฐ์ ์ฐ๊ฒฐ์ ํ๋ฉด ๋จ.
โ 2. ๋ณํ BST - Splay, AVL, BB

- Splay, VAL, BB ํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด์ง๋ง, ์ฑ๋ฅ์ ์ํด ๊ฐ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๊ธฐ ๊ท ํ์ ๋ง๋๋ ๋ณํ๋ค์ด๋ค. ์ฆ, ์ด์ง ํ์ ํธ๋ฆฌ(BST) ์ ํ์/์ฝ์ /์ญ์ ๋ฑ ์ฑ๋ฅ์ ์ฌ๋ฆฌ๊ธฐ ์ํด ๋ง๋ค์ด์ง๊ฒ์.
- ์์ธํ๊ฒ๋, BST๋ ์ ๋ ฅ๋๋ ์์์ ๋ฐ๋ผ ๊ตฌ์กฐ๊ฐ ๋๋คํ๊ฒ ๋ง๋ค์ด์ง๊ณ , ์ด ๋์๋ฉด ํ์์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ตฌ์กฐ๊ฐ ๋๋ค. ์ด๋ฅผ ๋ง๊ธฐ ์ํด AVL, RB, Splay ๊ฐ์ ๊ท ํ ํธ๋ฆฌ๋ค์ ‘๊ตฌ์กฐ๊ฐ ๋๋น ์ง์ง ์๋๋ก ๊ฐ์ ๋ก ์กฐ์ ํ๋ ํ์ ํธ๋ฆฌ'๋ค.
- ์ฆ, BST ์ ๊ท ํ์ด ์ ๋ง๋๋ค๋๊ฑด, ํธ๋ฆฌ ๋ด๋ถ์ ๋ ธ๋๋ค์ด ํ์์ ์ ๋ฆฌํ๊ฒ ์์นํด ์๋ค๋ ์๋ฏธ๋ก ํด์.
(1) Splay ํธ๋ฆฌ
- ์์ฃผ ํ์ํ๋ ํค๋ฅผ ๊ฐ์ง ๋ ธ๋๋ฅผ ๋ฃจํธ์ ์์นํ๋๋ก ๊ตฌ์ฑํ BS ํธ๋ฆฌ ( ์์ฃผ ํ์ํ๋ ํค๋ฅผ ์๋ก ์ฌ๋ฆฌ๋ ๋๋์. )
- ์ฆ, ์ต๊ทผ์ ์ ๊ทผํ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ๊ฐ์ ธ์ค๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋ํ, ๊ฒ์, ์ฝ์ , ์ญ์ ํ ํด๋น ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก Splay ์ฐ์ฐ์ ์ํํ์ฌ ํธ๋ฆฌ๋ฅผ ์ฌ์ ๋ ฌํจ.
- Splay ์ฐ์ฐ: ์ต๊ทผ์ ์ ๊ทผํ ๋ ธ๋๋ ๋ค์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์์ํ์ฌ ๋ฃจํธ๋ก ์ฌ๋ ค์ฃผ๋ ์ฐ์ฐ์ ์๋ฏธํ๋ฉฐ, ์ด๋ฌํ ๊ณผ์ ์ Splay ์ฐ์ฐ์ด๋ผ๊ณ ํ๋ค.
- Splay ํธ๋ฆฌ: Splay ์ฐ์ฐ์ ๋ฐ๋ณตํ๊ณ ์ ์ฉํ์ฌ ์ฌ๊ตฌ์ฑ๋์ด ์์ฑ๋ ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
(2) Splay ํธ๋ฆฌ - ์ฐ์ฐ
- Splay ํธ๋ฆฌ ์ฐ์ฐ์ ์ต๊ทผ์ ์ ๊ทผํ ๋ ธ๋๋ ๋ค์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ์์ํ์ฌ ๋ฃจํธ๋ก ์ฌ๋ ค์ฃผ๋ ์ฐ์ฐ์ ์๋ฏธํจ.
- Splay ์ฐ์ฐ์ 3๊ฐ์ง ํจํด: Zig , Zig-Zig , Zig-Zag ์ธ ๊ฐ์ง ํจํด์ด ์กด์ฌํจ.
- ์ด๋ฌํ ์ฐ์ฐ ๋ชจ๋ ๊ธฐ๋ณธ์ผ๋ก ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋๋ฅผ ๋ฃจํธ๊น์ง ์ฌ๋ฆฌ๊ธฐ ์ํด ๋ฐ๋ณต์ ์ผ๋ก ํ์ ํ๋ฉฐ ํธ๋ฆฌ๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ์งํํจ.
- ์ต๊ทผ์ ์ ๊ทผํ ๋ ธ๋ ๊ธฐ์ค: ๊ฒ์(์ฐพ์ผ๋ ค๋ ๊ฐ์ ๋ ธ๋), ์ฝ์ (์๋ก ๋ฃ๋ ๋ ธ๋), ์ญ์ (์ญ์ ํ๋ ค๋ ๋ ธ๋) ์ ๊ฐ์ ์์ ์ ์ํํ ๋ ธ๋๊ฐ ๋ฐ๋ก "์ต๊ทผ์ ์ ๊ทผํ ๋ ธ๋" ๊ฐ ๋๋ ๊ฒ์ด๋ค.
- ***์ฆ, ๊ฒ์ / ์ฝ์ / ์ญ์ ์ดํ ๋ฐ๋ก Splay ์ฐ์ฐ ์ ํตํด ์ฌ๊ตฌ์ฑ์ ํ๋ ํธ๋ฆฌ๋ผ๊ณ ๋ณด๋ฉด ๋ ๋ฏ.***
- ***๊ฒฐ๋ก ์ ๊ฒ์ / ์ฝ์ / ์ญ์ ์ฐ์ฐ ํ Zig, Zig-Zig, Zig-Zag ์ฐ์ฐ ํจํด์ ๊ณจ๋ผ์ ํ์ฉํ๋ ๋๋์ผ๋ก ์ดํดํ๋ฉด ๋ ๋ฏ.***
- ํ์ ์ด๋? - ๋จ์ํ ๋ ธ๋ ์์น๋ฅผ ๋ฐ๊พธ๋ ์์ ์ผ๋ก, BST ์ฑ์ง ์ ์ง + ๋ฃจํธ๋ก ์ฌ๋ฆฌ๋ ๋ชฉ์ ์ ๊ฐ์ง.
[ Zig ํจํด(์ฐ์ฐ) ]
- Splay Tree ์์ ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋์ ๋ถ๋ชจ๊ฐ ๋ฃจํธ์ผ ๋ ์ํ๋๋ ๋จ์ผ ํ์ ์ ํ๋ ์ฐ์ฐ์ ์๋ฏธํ๋ค.
- ์ฝ๊ฒ๋งํด, ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋๋ฅผ x๋ผ๊ณ ํ๋ฉด, x ๋ ธ๋๋ฅผ ๋ฃจํธ ๋ ธ๋๋ก ๋ฐ๋ก ์ฌ๋ ค๋ฒ๋ฆฌ๋ ์ฐ์ฐ์ด๋ค.
- ์ดํ, ๋๋จธ์ง ๋ ธ๋๋ค ๋ํ, ์ฌ๊ตฌ์ฑ์ด ๋ ์ ์์.
- ๋ํ, Zig ํจํด์ Splay ์ฐ์ฐ์ ๊ฐ์ฅ ๊ฐ๋จํ ๊ฒฝ์ฐ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
- ์ต์ข ์ ์ผ๋ก ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋ x๊ฐ ๋ฃจํธ๊ฐ ๋๋๋ก ํ๋ ํ์ ๋จ๊ณ ์ค ํ๋๋ก ๋ณผ ์ ์๋ค.
[ Zig-Zig ํจํด(์ฐ์ฐ) ]

- ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฃจํธ๋ก ์ฌ๋ฆฌ๊ณ ์๊ธฐ๊ฐ ๋ฃจํธ๋ก ์ฌ๋ผ๊ฐ๋ ์ฐ์ฐ์ด๋ค. ( ๋๊ฐ์ ๋จ์ผ ํ์ )
- ์์ ์ด๋ฏธ์ง์์ (1), (2), (3), (4) ์ผ๊ฐํ์ ์๋ธํธ๋ฆฌ๋ค์ ์๋ฏธํ๋ค. ์ฆ, ๋ง์ ํธ๋ฆฌ๊ฐ ์กด์ฌํ๋ค๊ณ ํด๋ ์์๊ฐ์ด ์ ์ ๋ ธ๋๋ง ์ฎ๊ฒจ์ ๊ตฌ์กฐ๋ฅผ ์ฌ๊ตฌ์ฑ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ํฌ์ง ์๋ค๋ ์ฅ์ ์ด ์์.
[ Zig-Zag ํจํด(์ฐ์ฐ) ]

- ์ต๊ทผ ์ ๊ทผํ ๋ ธ๋๋ฅผ x๋ก ๋ณผ ๋ x ๋ ธ๋๋ฅผ ํ๋์ฉ ๋ฃจํธ๋ ธ๋๋ก ์ฌ๋ฆฌ๋ ๊ณผ์ ์ผ๋ก ๋ณผ ์ ์์.
(3) Splay ํธ๋ฆฌ - ์ฐ์ฐ ์์

- ์ผ์ชฝ ํธ๋ฆฌ์ ๋ํด 7์ด ๋ฃจํธ๊ฐ ๋๋๋ก Splay ์ฐ์ฐ์ ์ ์ฉํ ์์ ์.
(4) Splay ํธ๋ฆฌ - ์ ๋ฆฌ
- ์ต๊ทผ ์ฌ์ฉ ๋ฐ์ดํฐ๋ฅผ ๋ฃจํธ๋ก ์ฌ๋ฆฌ๋ ์ฌ๊ตฌ์ฑ์ ํตํด ์ต๊ทผ ์ฌ์ฉ ๋ฐ์ดํฐ ์ต์ ํ๋ฅผ ์งํํจ.
- ์ฆ, Splay ํธ๋ฆฌ์ ํต์ฌ์ ์ฌ๊ตฌ์ฑ์ ํตํ ์ ๋ ฌ๋ก ๋ณผ ์ ์์.
(5) AVL ํธ๋ฆฌ
- ์ผ๋ฐ์ ์ผ๋ก BST๋ ๋จ์ํ ์ด์ง ํธ๋ฆฌ์ ๊ท์น๊ณผ ์ผ์ชฝ < ํ์ฌ < ์ค๋ฅธ์ชฝ ๊ท์น๋ง ๋ฐ๋ฅด๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ์ฝ์ ์์์ ๋ฐ๋ผ ํธ๋ฆฌ๊ฐ ํ์ชฝ์ผ๋ก ์น์ฐ์น ์ ์์. ์ฆ, ํธํฅ ํธ๋ฆฌ๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ์๋ฏธ์.
- ์ฆ, ์ด๋ฌํ ํธํฅ ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋์จ๊ฒ์ด AVL ํธ๋ฆฌ์ด๋ค.
- BST ๋ฅผ ์ ์งํ๋ฉด์ ๊ท ํ์ ๋ง์ถ๋ ค๋ฉด ์ค๋ฒํค๋๊ฐ ๋๋ฌด ์ปค์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋์ด ๊ท ํ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์๋ ๊ฐ๋ ์ผ๋ก AVL ํธ๋ฆฌ๊ฐ ๋ฑ์ฅ ํ ๊ฒ์ผ๋ก๋ ๋ด. ( ๋์ด์ฐจ์ด๋ 1์ฐจ์ด ์ ๋๋ก ๋ด )
(6) AVL ํธ๋ฆฌ - ํน์ง

- AVL ํธ๋ฆฌ์ ํน์ง: ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ค์ BF(x) = { -1, 0, 1 } ์ ๊ฐ์ ํน์ง์ ๊ฐ์ง.
- BF(balance factor): ์์์ ๋ ธ๋ x์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด ์ฐจ์ด๋ฅผ ํด๋น ๋ ธ๋ x์ balance factor ๋ผํจ.
- BF(x) = { -1, 0, 1 }: ๋ชจ๋ ๋ ธ๋๊ฐ -1 , 0 , 1 ๋ฐธ๋ฐ์ค ํฉํฐ๋ฅผ ๊ฐ์ง๋ ์ด์ง ํ์ ํธ๋ฆฌ(BST) ๋ฅผ ์๋ฏธํจ.
- ์ฆ, ๋ชจ๋ ๋ ธ๋๊ฐ ์ผ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด - ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด ๋ฅผ ์งํ ํ์ ๋ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก -1, 0, 1 ์ ์ป์ด์ผ ๋ฐธ๋ฐ์ค(๊ท ํ)์ด ๋ง๋ค๊ณ ํ๋จ์ ํ๊ณ , ๋ง์ฝ ํด๋น ์์ ํฌํจ์ด ๋์ง ์์ ๊ฒฝ์ฐ์๋ ์์น ์กฐ์ ์ด ํ์ํ ์ํฉ์ผ๋ก ํ๋จํด ์์น๋ฅผ ์กฐ์ ํ๊ฒ ๋จ.
- ํธ๋ฆฌ์ ๋์ด: ๋ฃจํธ ๋ ธ๋๋ก ๋ถํฐ ์ ๋ ธ๋๊น์ง์ ์ฐจ์๋ฅผ ๋์ด๋ก ๋ณผ ์ ์์. ์ฆ, ๋ ธ๋๊ฐ 3๊ฐ ์๋ค๋ฉด ๊ทธ๊ฑด ๋์ด๊ฐ 2์.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฌํ balance factor ๋ฅผ ํตํด ๊ท ํ์ ์ ์งํจ.
(7) AVL ํธ๋ฆฌ - balance factor ์์

- ๋ง์ฝ 50์ ๊ธฐ์ค์ผ๋ก ํ๋ค๋ฉด, 50์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ ๋์ด๊ฐ 1์ด ๋ ๊ฒ์ด๊ณ , ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด๋ 2๊ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด(1) - ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ๋์ด(2) ๋ฅผ ํ๊ฒ ๋๋ฉด, -1 ๋์ด์ฐจ๋ฅผ ์ป์ ์ ์๊ฒ ๋๋ค.
- ๊ทธ ๊ฒฐ๊ณผ -1, 0, 1 ์ ํฌํจ์ด ๋๊ธฐ ๋๋ฌธ์ ๊ท ํ์ด ๋ง๋ค๊ณ ํ๋จํด ํด๋น 50 ๋ ธ๋๋ ์กฐ์ ์ด ํ์์๋ค ํ๋จ์ ํ๊ฒ ๋๋ค.
- ***์ฆ, AVL ํธ๋ฆฌ๋ ๋ชจ๋ ๋ ธ๋์ ๋ฐธ๋ฐ์ค ํฉํฐ๋ฅผ ๊ตฌํด๊ฐ์ง๊ณ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ฉด ํธ๋ฆฌ์ ๊ตฌ์กฐ๊ฐ ๋นํจ์จ์ ์ด๋ผ๊ณ ํ๋จํด ๊ท ํ์ ๋ง์ถ๋ ์์ ์ธ ์์น ์กฐ์ ์ ํ๋ ๊ทธ๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ณผ ์ ์๋ค.***
- ***์ด๋ฌํ ๊ณผ์ ์ ์กฐํ๋ฅผ ์ ์ธํ ๋งค๋ฒ ์ฝ์ ๊ณผ ์ญ์ ๊ณผ์ ์์ ๋ฐธ๋ฐ์ค ํฉํฐ๋ฅผ ํ์ธํ๋ ์์ ์ ์งํํจ.***
(8) AVL ํธ๋ฆฌ - ๋์ ์์
![]() |
![]() |
- ์์ ๊ฐ์ด 90์ ์ฝ์ ํ ๋ค ์ฝ์ ์ฐ์ฐ์ด ์ด๋ค์ก์ผ๋ฏ๋ก, BF(balance factor) ๊ฒ์ฌ๋ฅผ ํ๊ฒ ๋๋๋ฐ ์ด๋ 50์ ๋ณด๋ฉด 1, 0, -1 ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์ ๊ท ํ์ด ๋ง์ง ์๋ค๊ณ ํ๋จ์ ํ๊ฒ ๋จ.
- ๋ํ, ํด๋น ๊ตฌ์กฐ๋ 50์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ท ํ์ด ๊นจ์ง ์ํ๋ก ์ค๋ฅธ์ชฝ ํธํฅ ํธ๋ฆฌ๋ก ๋ณผ ์ ์์.
- ์ด์ ๊ท ํ์ ์ก์์ค์ผํ๋๋ฐ, ์ด์ง ํ์ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๊ท์น์ ๋ฐ๋ผ์ผํ๋ฉฐ, ์์ ์ค๋ฅธ์ชฝ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ชจ์ต์ผ๋ก ๋ฐ๋๊ฒ ๋จ.
- ์ฆ, ๊ฒฐ๊ณผ์ ์ผ๋ก AVL ํธ๋ฆฌ์ ํน์ง(๋์ด์ฐจ 1, 0 ,-1) ์ ๋ง์กฑํ๋ ๊ตฌ์กฐ๋ก ๋ฐ๋๊ฒ ๋๋ค.
(9) BB ํธ๋ฆฌ
[ BB ํธ๋ฆฌ ( Bounded-Balanced Tree ]


- BB ํธ๋ฆฌ์ "Bounded-Balanced Tree" ์ ๋ป์ "๊ฒฝ๊ณ๊ฐ ์ค์ ๋ ๊ท ํ ํธ๋ฆฌ" ๋๋ " ๊ท ํ์ด ์ผ์ ๋ฒ์(ํ๊ณ) ์์์ ์ ์ง๋๋ ํธ๋ฆฌ" ๋ฅผ ์๋ฏธํ๋ค.
- ์ฝ๊ฒ๋งํด, AVL ํธ๋ฆฌ ์ฒ๋ผ ์๋ฒฝํ ๊ท ํ์ ์ก๋ ๊ฒ์ด ์๋, ํ์ฉ๋ ๋ฒ์ ์์์ ๊ท ํ์ ์ ์งํ๋ ํธ๋ฆฌ๋ก ๋ณผ ์ ์๋ค.
- ์ฆ, ํ์ฉ ์ค์ฐจ ๋ด์์ ๊ท ํ์ ์ ์งํด์ฃผ๋ฉฐ, ๊ท ํ ์กฐ๊ฑด์ด ์ฌํ์ง ์์ง๋ง, ๋๋ฌด ํํธ๋ฌ์ง์ง ์๊ฒ ์ ํ๋ ๊ท ํ ํธ๋ฆฌ์.
- ***๊ทธ๋ฆฌ๊ณ ํต์ฌ์ ํด๋น BB ํธ๋ฆฌ๊ฐ ์๋ฏธํ๋ ๊ท ํ์ ๋ฌด๊ฒ ๊ธฐ๋ฐ ๊ท ํ์ ์๋ฏธํ๋ค.***
- ๊ฒฐ๋ก ์ ํด๋น ํธ๋ฆฌ๋ ๋์ด๊ฐ ์๋ **์๋ธํธ๋ฆฌ์ ๋ ธ๋ ๊ฐ์(ํฌ๊ธฐ/๋ฌด๊ฒ)**๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ท ํ์ ์ก๋๋ค.
[ ๊ท ํ ์กฐ๊ฑด: β (๋ฒ ํ) ]

- BB ํธ๋ฆฌ๊ฐ ๊ท ํ์ ์ ์งํ๋ ์ ๋๋ **๊ท ํ ์ธ์ β(๋ฒ ํ)** ๋ผ๋ ๊ฐ์ผ๋ก ์ ์ด๊ฐ ๋๋ค.
[ β ๊ฐ์ ๋ฐ๋ฅธ ๊ตฐํ ์ ๋ ]

- ๐ ์ฐธ๊ณ : β๊ฐ 1/2์ ๊ฐ๊น์ธ์๋ก ๊ท ํ์ ์๊ฒฉํด์ง์ง๋ง, ์ฝ์ /์ญ์ ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํ ์ฌ์กฐ์ (Rebalancing) ์์ ์ด ๋ ์์ฃผ ๋ฐ์ํ๋ค.
[ ๊ฒฐ๋ก ]
- ๊ฒฐ๋ก ์ ์ผ๋ก, BB ํธ๋ฆฌ๋ β ๊ฐ์ ์ค์ ํ์ฌ ์๋ธํธ๋ฆฌ ๊ฐ์ ๋ ธ๋ ๊ฐ์ ๋น์จ์ ์ ํํจ์ผ๋ก์จ "๋๋ฌด ๊ธฐ์ธ์ด์ง์ง ์๋๋ก" ๊ทํ์ ์ ์งํ๋ ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ก ๋ณผ ์ ์์.
- AVL ํธ๋ฆฌ๋ ๋์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ , BB ํธ๋ฆฌ๋ ๋ฌด๊ฒ(๋ ธ๋์ ๊ฐฏ์)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ท ํ์ ์ก๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์.
'๐๋ฐฉ์กํต์ ๋ํ๊ต > ๐ข์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฃ๊ตฌ์กฐ] 13๊ฐ - ๋ฉํฐ์จ์ด ํ์ ํธ๋ฆฌ(2) (0) | 2025.12.05 |
|---|---|
| [์๋ฃ๊ตฌ์กฐ] 12๊ฐ - ๋ฉํฐ์จ์ด ํ์ ํธ๋ฆฌ(1) (0) | 2025.11.22 |
| [์๋ฃ๊ตฌ์กฐ] 9๊ฐ - ํ (0) | 2025.11.13 |
| [์๋ฃ๊ตฌ์กฐ] 8๊ฐ - ์ค๋ ๋ํธ๋ฆฌ (0) | 2025.10.23 |
| [์๋ฃ๊ตฌ์กฐ] 7๊ฐ - ํธ๋ฆฌ (0) | 2025.10.14 |








