๋๋๋น ๋์ ์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ํ ํธ๋ฆฌ(Tree) ์๋ฃ๊ตฌ์กฐ 10๋ถ ํต์ฌ ์์ฝ ๊ณผ ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ฉด์ ํธ๋ฆฌ์ ๋ํด ๊ณต๋ถํ๋ค. ๊ฐ๋ ์ ๋ดค๋ค๋ฉด ๋ฐฑ์ค์์ ๋ฐ๋ก ์ ์ฉํด๋ณด๋ ๊ฒ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์์๋ผ๊ณ ์๊ฐํ๋ค. ๐
๋ฌธ์
์ ์ถ๋ ฅ ์์
ํด๋์ค ๋ฐ ์ํ ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ์ํ ํจ์ ๊ตฌํ
ํธ๋ฆฌ ๊ตฌํ์ ์ฒ์์ด๋ผ ๋๋๋น ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
# ํธ๋ฆฌ ๊ตฌ์กฐ ํํ์ ์ํ ๋
ธ๋ ํด๋์ค ์์ฑ
class Node:
def __init__(self, root, left_node, right_node):
self.root = root # ๋ถ๋ชจ ๋
ธ๋
self.left_node = left_node # ์ผ์ชฝ ๋
ธ๋
self.right_node = right_node # ์ค๋ฅธ์ชฝ ๋
ธ๋
# ์ ์ ์ํ
def preorder(node):
print(node.root, end='')
# ์์ ๋
ธ๋๊ฐ ์์ ๋ ์ผ์ชฝ ๋
ธ๋๋ถํฐ ๋ฐฉ๋ฌธ ํ ์ถ๋ ฅ
if node.left_node != ".":
preorder(tree[node.left_node])
if node.right_node != ".":
preorder(tree[node.right_node])
def inorder(node):
if node.left_node != ".":
inorder(tree[node.left_node])
print(node.root, end='')
if node.right_node != ".":
inorder(tree[node.right_node])
def postorder(node):
if node.left_node != ".":
postorder(tree[node.left_node])
if node.right_node != ".":
postorder(tree[node.right_node])
print(node.root, end='')
๊ฐ ์ํ ๋ฐฉ์์ ํฐ ์ฐจ์ด์ ์ ๋ ธ๋ ์ถ๋ ฅ ์์์ด๋ค. ์ ์/์ค์/ํ์ ์ํ ๋ฐฉ์์ ๋ฐ๋ผ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋๋ฐ ํธ๋ฆฌ๋ ํฐ ํธ๋ฆฌ ์์ ์๋ธ ํธ๋ฆฌ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ท์ ๊ฐ๋ ๋ ๋ค์ด๊ฐ๋ค. ํด๋์ค๋ฅผ ๋ง์ด ์จ๋ณด์ง ์์์ ๋ ธ๋ ํด๋์ค ๊ตฌํ ๋ถ๋ถ์ด ์์ํ์ง๋ง ํด๋์ค์ ์ต์ํ ์ฌ๋์ด๋ผ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ๊ฒ ๊ฐ๋ค.
์ ์ฒด ์ฝ๋
# Silver 1
class Node:
def __init__(self, root, left_node, right_node):
self.root = root
self.left_node = left_node
self.right_node = right_node
def preorder(node):
print(node.root, end='')
if node.left_node != ".":
preorder(tree[node.left_node])
if node.right_node != ".":
preorder(tree[node.right_node])
def inorder(node):
if node.left_node != ".":
inorder(tree[node.left_node])
print(node.root, end='')
if node.right_node != ".":
inorder(tree[node.right_node])
def postorder(node):
if node.left_node != ".":
postorder(tree[node.left_node])
if node.right_node != ".":
postorder(tree[node.right_node])
print(node.root, end='')
# ๋
ธ๋ ๊ฐ์
n = int(input())
# ๋ถ๋ชจ/์์ ๋
ธ๋ ๊ด๊ณ ํํ์ ์ํ ๋์
๋๋ฆฌ
# ex) A(๋ถ๋ชจ): [B, C](์์)
tree = {}
for i in range(n):
root, left_node, right_node = input().split()
tree[root] = Node(root, left_node, right_node)
preorder(tree['A'])
print()
inorder(tree['A'])
print()
postorder(tree['A'])
'Problem Solving > BOJ & Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 11256๋ฒ: Jelly Bean (0) | 2022.02.03 |
---|---|
[BOJ] 5177๋ฒ: Format Error! (0) | 2022.02.03 |
[BOJ] 1806๋ฒ: Subsequence (๋ถ๋ถํฉ) (0) | 2021.07.13 |
[BOJ] 2003๋ฒ: ์๋ค์ ํฉ 2 (0) | 2021.07.09 |
[BOJ] 1260๋ฒ: DFS์ BFS (2) | 2021.06.27 |