์๋์ ์ ํฝ์์์ ๋ฐํ์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์ข์์์ ๊ฐ์ฌํฉ๋๋ค.
Tree์ ์ข ๋ฅ : https://youtu.be/LnxEBW29DOw
0. ํธ๋ฆฌ(tree)๋? |
์ฆ Array, LinkedList, Stack, Queue๊ฐ์ด ์ ํ๊ตฌ์กฐ๊ฐ ์๋, ๋ถ๋ชจ์์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ณ์ธตํ ๊ทธ๋ํ.
1. ์ด์ง ํธ๋ฆฌ(Binary tree) |
Binary tree : ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ฅผ ์ต๋ 2๊ฐ์ฉ๋ง ๊ฐ๊ณ ์๋ ํธ๋ฆฌ.
Ternary tree : ์์ ๋ ธ๋๋ฅผ 2๊ฐ ์ด์ ๊ฐ๊ณ ์๋ ํธ๋ฆฌ
2. ์ด์ง ๊ฒ์ ํธ๋ฆฌ(Binary Search Tree) |
Binary tree : ๋ ธ๋๋ค๊ฐ์ ๋์๊ด๊ณ๋ ๊ณ ๋ คํ์ง ์๋๋ค.
Binary search tree : left child์ ๊ทธ ์ดํ ๋ ธ๋๋ค์ ๋ฐ์ดํฐ๊ฐ ํ์ฌ ๋ ธ๋(๋ถ๋ชจ ๋ ธ๋)์ ๋ฐ์ดํฐ ๋ณด๋ค ์์์ผ ํ๊ณ , right child์ ๊ทธ ์ดํ ๋ ธ๋๋ค์ ๋ฐ์ดํฐ๊ฐ ํ์ฌ ๋ ธ๋(๋ถ๋ชจ ๋ ธ๋)์ ๋ฐ์ดํฐ ๋ณด๋ค ์ปค์ผํ๋ค.
3. ๋ฐธ๋ฐ์ค(Balance) |
Balanced : left, right ๋ ธ๋์ ๊ฐฏ์๊ฐ ์ ํํ๊ฒ ์ผ์นํด์ผ ํ ํ์๋ ์์. unbalanced์ฒ๋ผ ์ง๋์น๊ฒ ํ์ชฝ์ผ๋ก ์น์ฐ์น์ง ์์๋ค๋ฉด balanced tree. (์: red-black tree, AVL tree)
Unbalanced : ํ์ชฝ์ผ๋ก ์ง๋์น๊ฒ ์น์ฐ์น tree.
4. ์์ ์ด์ง ํธ๋ฆฌ(Complete binary tree) |
Complete binary tree : ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ ๋ ๋ฒจ์ด ๊ฐ์์ผ ํ๊ณ , ๋ง์ง๋ง ๋ ๋ฒจ์ ์ผ์ชฝ๋ถํฐ ์ฑ์์ ธ ์์ด์ผ ํจ.
5. ์ ์ด์งํธ๋ฆฌ(Full binary tree) |
Full binary tree : ์์ ๋ ธ๋๊ฐ ์์ ์๊ฑฐ๋, ์ต๋ ๋๋ฟ์ธ tree. ์์์ ํ๋๋ง ๊ฐ์ง ๋ ธ๋๊ฐ ์์ด์ผ ํ๋ค.
6. ํฌํ ์ด์ง ํธ๋ฆฌ(Perfect binary tree) |
Perfect binary tree : ์์์ด ์์ ์๊ฑฐ๋ 2๊ฐ์ฉ๋ง ๊ฐ๋ Full binary tree์ ๋ฌ๋ฆฌ, Perfect binary tree๋ ์๋ฒฝํ ํผ๋ผ๋ฏธ๋ ํํ๋ก, ๋น๊ณต๊ฐ ์์ด ๋ชจ๋ ๋ ธ๋๊ฐ 2๊ฐ์ ์์์ ๊ฐ๊ณ ์๋ tree.
*Q. Perfect binary search์ ๋ ๋ฒจ์ ๊ฐฏ์๊ฐ n์ด๋ผ๋ฉด, ํด๋น ํธ๋ฆฌ์ ๋ ธ๋์ ๊ฐฏ์๋?
A. $2^n-1$. root์ ์ธ ๋ชจ๋ ๋ ธ๋๋ ์์์ 2๊ฐ์ฉ ๊ฐ๊ณ ์์ผ๋ฏ๋ก.
Binary Tree์ 3๊ฐ์ง ์ํ๋ฐฉ๋ฒ ๊ตฌํํ๊ธฐ : https://youtu.be/QN1rZYX6QaA
7. ์ด์ง ํธ๋ฆฌ์ ์ํ(Binary tree traversal) |
์ด์ง ํธ๋ฆฌ์ ์ํ๋ค(Binary tree traversals) : Root๋ฅผ ์ ์ผ ๋จผ์ ์ํ ํ๋, ์ค๊ฐ์ ํ๋, ์ ์ผ ๋์ค์ ํ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง. | |
์ค์ ์ํ(Inorder) : Root๋ฅผ ์ค๊ฐ์ ์ํ | Left, Root, Right (LRootR) |
์ ์ ์ํ(Preorder) : Root๋ฅผ ์ ์ผ ๋จผ์ ์ํ | Root, Left, Right (RootLR) |
ํ์ ์ํ(Postorder) : Root๋ฅผ ์ ์ผ ๋์ค์ ์ํ | Left, Right, Root (LRRoot) |
7-1. ์ค์์ํ(Inorder : LRootR) |
Inorder : Root๋ฅผ ์ค๊ฐ์ ์ํ ํ๋ค. Left - Root - Right ์์๋ก ๋ ธ๋๋ฅผ ์ํ.
1. left leaf๋ก ์ด๋
2. ํ์ฌ ๋ ธ๋ ์ถ๋ ฅ
3. parent node ์ถ๋ ฅ
4. (parent node์ right child๊ฐ ์๋ค๋ฉด) right child ์ถ๋ ฅ
6. ํ ๋ ๋ฒจ์ฉ ์๋ก ์ฌ๋ผ๊ฐ๋ฉฐ ๋ฐ๋ณต
7. ๋งจ ์ ์ฌ๋ผ๊ฐ๋ค๋ฉด root์ถ๋ ฅ
8. root์ right child๊ฐ ์๋ค๋ฉด right child๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ 1~7๋ฒ ๋ฐ๋ณต
*Q. ์ ํธ๋ฆฌ์ Inorder ์ํ ๊ฒฐ๊ณผ๋?
A. 4-2-5-1-3
*Q. ์๋ ํธ๋ฆฌ์ Inorder ์ํ ๊ฒฐ๊ณผ๋?
A. 4-2-5-1-8-6-3-7
7-2. ์ ์์ํ(Preorder : RootLR) |
1. root ์ถ๋ ฅ
2. left child ์ถ๋ ฅ
3. left leaf๋ก ๊ฐ๋๊น์ง ๋ฐ๋ณต
4. ํ ๋ ๋ฒจ ์๋ก ์ฌ๋ผ๊ฐ
5. (ํ์ฌ ๋ ธ๋๊ฐ right child๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด) right child์ถ๋ ฅ
6. right child๊ฐ ์์์ ๊ฐ๊ณ ์๋ค๋ฉด ๋ค์ 2~4๋ฒ ๋ฐ๋ณต
7. root๊น์ง ์ฌ๋ผ๊ฐ๋ฉฐ ๋ฐ๋ณต
8. root์ right child๊ฐ ์๋ค๋ฉด ๋ค์ 2~6๋ฒ ๋ฐ๋ณต
*Q. ์ ํธ๋ฆฌ์ preorder ์ํ ๊ฒฐ๊ณผ๋?
A. 1-2-4-5-3
*Q. ์๋ ํธ๋ฆฌ์ Preorder ์ํ ๊ฒฐ๊ณผ๋?
A. 1-2-4-5-6-3-7-8
7-3. ํ์์ํ(Postorder : LRRoot) |
1. left leaf๋ก ์ด๋ ๋ฐ ์ถ๋ ฅ
2. (parent node์ right child๊ฐ ์๋ค๋ฉด) right child ์ถ๋ ฅ
3. parent ์ถ๋ ฅ
4. ํ ๋ ๋ฒจ์ฉ ์๋ก ์ฌ๋ผ๊ฐ๋ฉฐ ๋ฐ๋ณต
5. root์ right child๊ฐ ์๋ค๋ฉด right child๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ค์ 1~4๋ฒ ๋ฐ๋ณต
6. root์ถ๋ ฅ
*Q. ์ ํธ๋ฆฌ์ preorder ์ํ ๊ฒฐ๊ณผ๋?
A. 4-5-2-3-1
*Q. ์๋ ํธ๋ฆฌ์ Postorder ์ํ ๊ฒฐ๊ณผ๋?
A. 4-6-5-2-7-8-3-1
8. ๊ธฐ๋ณธ ์ด์งํธ๋ฆฌ ๊ตฌํ ๋ฐ ์ฐ์ต(c++) |
(1) ์ด์งํธ๋ฆฌ(Binary tree)์ 3๊ฐ์ง ์ํ๋ฐฉ๋ฒ์ ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ธฐ
(2) ์๋์ ํธ๋ฆฌ๋ฅผ ๋ณด๊ณ , ํค๋์ ๋น ํจ์๋ฅผ ๊ตฌํํด๋ณด๊ธฐ
'โ๏ธ ์ด๋ก > ์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) - ๋ฐฐ์ด์ ์ด์ง๊ฒ์ํธ๋ฆฌ๋ก ๋ง๋ค๊ธฐ (0) | 2019.09.19 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ(Graph) - ๋ ์ง์ ์ ๊ฒฝ๋ก ์ฐพ๊ธฐ(dfs) (0) | 2019.09.19 |
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ(Graph) - DFS, BFS ๊ตฌํ (0) | 2019.09.19 |
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) - ํธ๋ผ์ด ํธ๋ฆฌ(Trie tree) (3) | 2019.09.19 |
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) - ์ด์ง ํ(Binary Heaps) (0) | 2019.09.19 |