문제 링크
https://www.acmicpc.net/problem/1991
__init__ : 생성자라고 불리는 초기화를 위한 함수.
인스턴스화를 할 때 반드시 처음 호출되는 함수.
오브젝트 생성(인스턴스 생성)과 관련하여 데어터의 초기화를 실시하는 함수.
__init__은 반드시 첫번째 인수로 self를 지정해야함.
클래스 생성할 때에 지정된인수는 초기화 메소드의 2번째 부터 작성.
전위 순회, 중위 순회, 후위 순회를 하는 코드를 작성할 때, 각각의 방법을 어떻게 코드로 작성할 지 생각하기 어려웠다.
정답 코드
import sys
class Tree:
def __init__ (self, root, left, right):
self.root = root
self.left = left
self.right = right
#전위 순회: 뿌리 - 왼쪽 - 오른쪽 순으로 방문하기 때문에, 노드를 방문하고 왼쪽 전위 순회, 오른쪽 전위 순회를 실행한다.
def preorder(node):
print(node.root, end='')
if node.left != '.': #node의 왼쪽 자식이 있을 때
preorder(tree[node.left])
if node.right != '.': #node의 오른쪽 자식이 있을 때
preorder(tree[node.right])
#중위 순회: 왼쪽 - 뿌리 - 오른쪽 순으로 방문하기 때문에, 왼쪽 중위 순회를 한 후에 노드를 방문한다. 그 후에 오른쪽 중위 순회를 실행한다.
def inorder(node):
if node.left != '.':
inorder(tree[node.left])
print(node.root, end='')
if node.right != '.':
inorder(tree[node.right])
#후위 순회: 왼쪽 - 오른쪽 - 뿌리 순으로 방문하기 때문에, 왼쪽 후위 순회, 오른쪽 후위 순회를 실행하고, 그 후에 노드를 방문한다.
def postorder(node):
if node.left != '.':
postorder(tree[node.left])
if node.right != '.':
postorder(tree[node.right])
print(node.root, end='')
N = int(sys.stdin.readline().rstrip())
inputs = []
for i in range(N):
inputs.append(sys.stdin.readline().split())
tree = {}
for root, left, right in inputs:
tree[root] = Tree(root,left,right)
preorder(tree['A'])
print()
inorder(tree['A'])
print()
postorder(tree['A'])
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 1167번 파이썬 (0) | 2022.09.04 |
---|---|
Baekjoon Online Judge 11725번 파이썬 (0) | 2022.09.01 |
Baekjoon Online Judge 2146번 파이썬 😩 (0) | 2022.08.24 |
Baekjoon Online Judge 2178번 파이썬 (1) | 2022.08.22 |
Baekjoon Online Judge 7576번 파이썬 (0) | 2022.08.16 |