2024. 2. 9. 02:25ใCS - Roadmap.sh/3. Common Algorithms
CS - 3. Common Algorithms - 3.7 Tree - 3.7.2 In-Order Traversal
In-Order Traversal
๐กIn-order traversal is a tree traversal algorithm that visits the left subtree, the root, and then the right subtree. This is the most common way to traverse a binary search tree. It is also used to create a sorted list of nodes in a binary search tree.
์ค์ ์ํ(Inorder Traversal)์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ, ๋ฃจํธ, ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ ํธ๋ฆฌ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ํ ์ด์ง ๊ฒ์ ํธ๋ฆฌ์์ ์ ๋ ฌ๋ ๋ ธ๋ ๋ชฉ๋ก์ ๋ง๋๋ ๋ฐ๋ ์ฌ์ฉ๋ฉ๋๋ค.
In-Order Traversal์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ ธ๋๋ฅผ '์ผ์ชฝ ์์ - ๋ถ๋ชจ - ์ค๋ฅธ์ชฝ ์์' ์์๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค. ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ด์ง ํ์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ ธ๋๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
In Python
class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def in_order_traversal(node):
if node is not None:
in_order_traversal(node.left)
print(node.data, end=' ')
in_order_traversal(node.right)
๋ ธ๋๋ฅผ ๋ง๋ค๊ณ , ํจ์๋ฅผ ์ค์ ํด์ค๋ค.
์ด๋ฐ ๊ทธ๋ํ๋ฅผ ์์๋ก ์ค์์์ฐจ(inorder traversla)์ ํด๋ณด๊ฒ ์ต๋๋ค.
ํจ์์ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ๋ฃจํธ ๋
ธ๋(1)์์ ์์ํฉ๋๋ค.
2. ๋ฃจํธ ๋
ธ๋์ ์ผ์ชฝ ์์๋
ธ๋(2)๋ก ์ด๋ํฉ๋๋ค.
3. ์ด๋ํ ๋
ธ๋(2)๊ฐ ์ผ์ชฝ ์์๋
ธ๋(4)๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ๋ค์ ์ผ์ชฝ ์์๋
ธ๋(4)๋ก ์ด๋ํฉ๋๋ค.
4. ์ด๋ํ ๋
ธ๋(4)๋ ๋ ์ด์ ์ผ์ชฝ ์์๋
ธ๋๊ฐ ์์ผ๋ฏ๋ก, ์ด ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ(์ถ๋ ฅ)ํฉ๋๋ค.
5. ๋
ธ๋(4)๋ ์ค๋ฅธ์ชฝ ์์๋
ธ๋๋ ์์ผ๋ฏ๋ก, ์ด ๋
ธ๋์ ๋ถ๋ชจ ๋
ธ๋(2)๋ก ๋์๊ฐ์ ์ด ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ(์ถ๋ ฅ)ํฉ๋๋ค.
6. ์ด์ ๋
ธ๋(2)์ ์ค๋ฅธ์ชฝ ์์๋
ธ๋(5)๋ฅผ ๋ฐฉ๋ฌธ(์ถ๋ ฅ)ํฉ๋๋ค.
7. ๋
ธ๋(2)์ ๋ชจ๋ ์์๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ผ๋ฏ๋ก, ๋
ธ๋(2)์ ๋ถ๋ชจ ๋
ธ๋(1)๋ก ๋์๊ฐ์ ์ด ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ(์ถ๋ ฅ)ํฉ๋๋ค.
8. ๋ง์ง๋ง์ผ๋ก ๋
ธ๋(1)์ ์ค๋ฅธ์ชฝ ์์๋
ธ๋(3)๋ฅผ ๋ฐฉ๋ฌธ(์ถ๋ ฅ)ํฉ๋๋ค.
---(๋์ค์์ )
์ด๊ฑฐ ์ด๋ฌ๋ฉด ์ฌ๊ท์ ์ผ๋ก 1์์ ํ๊ณ ํ๊ณ ๋ค์ด๊ฐ์ ์ ์ผ ์๋์ ์์๋ ธ๋์์ ์์ํ๋๋ฐ
์ด๋ฌ๋ฉด ์ฐ์ฐ์ ์ฒ์ 1๋ถํฐ pre-order ๋ณด๋ค ๊ณผ์ ์ด ๋ ์๋๊ฒ ์๋๊ฐ??
์ ์ฐ๋๊ฑฐ์ง?
'CS - Roadmap.sh > 3. Common Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3.8 Back Tracking Algorithm(์ญ์ถ์ ์๊ณ ๋ฆฌ์ฆ) - 3.8.1 Finding Hamiltonian Paths(ํด๋ฐํด ๊ฒฝ๋ก) (2) | 2024.02.10 |
---|---|
3.7.3 Post-Order Traversal (1) | 2024.02.10 |
3.7.1 Pre-Order Traversal(์ ์ ์ํ) (0) | 2024.02.08 |
3.6.4 Primโs Algorithm (ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ) (0) | 2024.02.07 |
3.6.3 Ford Fulkerson algorithm(ํด๋ํ์ปค์จ ์๊ณ ๋ฆฌ์ฆ) (1) | 2024.02.06 |