문제) 백준 - 트리 - 트리 순회
-> www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자
www.acmicpc.net
기본적인 트리 순회 문제. 트리 문제라 해서 struct, Tree에 얽매이지 말자.
C++ 소스 코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <bits/stdc++.h> | |
#define endl "\n" | |
using namespace std; | |
int n; | |
char tree[26][2]; | |
void preOrder(char root) { | |
if (root == '.') | |
return; | |
cout << root; | |
preOrder(tree[root - 'A'][0]); | |
preOrder(tree[root - 'A'][1]); | |
} | |
void inOrder(char root) { | |
if (root == '.') return; | |
inOrder(tree[root - 'A'][0]); | |
cout << root; | |
inOrder(tree[root - 'A'][1]); | |
} | |
void postOrder(char root) { | |
if (root == '.') return; | |
postOrder(tree[root - 'A'][0]); | |
postOrder(tree[root - 'A'][1]); | |
cout << root; | |
} | |
int main() { | |
cin >> n; | |
char a, b, c; | |
for (int i = 0; i < n; ++i) { | |
cin >> a >> b >> c; | |
tree[a - 'A'][0] = b; | |
tree[a - 'A'][1] = c; | |
} | |
preOrder('A'); | |
cout << endl; | |
inOrder('A'); | |
cout << endl; | |
postOrder('A'); | |
return 0; | |
} |
파이썬 소스 코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
input = sys.stdin.readline | |
class Node: | |
def __init__(self, data, left_node, right_node): | |
self.data = data | |
self.left_node = left_node | |
self.right_node = right_node | |
def pre_order(node): | |
print(node.data, end='') | |
if node.left_node != None: | |
pre_order(tree[node.left_node]) | |
if node.right_node != None: | |
pre_order(tree[node.right_node]) | |
def in_order(node): | |
if node.left_node != None: | |
in_order(tree[node.left_node]) | |
print(node.data, end='') | |
if node.right_node != None: | |
in_order(tree[node.right_node]) | |
def post_order(node): | |
if node.left_node != None: | |
post_order(tree[node.left_node]) | |
if node.right_node != None: | |
post_order(tree[node.right_node]) | |
print(node.data, end='') | |
n = int(input()) | |
tree = {} | |
for i in range(n): | |
data, left_node, right_node = input().split() | |
if left_node == '.': | |
left_node = None | |
if right_node == '.': | |
right_node = None | |
tree[data] = Node(data, left_node, right_node) | |
pre_order(tree['A']) | |
print() | |
in_order(tree['A']) | |
print() | |
post_order(tree['A']) |
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 1927번 - 최소 힙 (C++/파이썬) 문제 및 풀이 (0) | 2021.04.14 |
---|---|
[백준] 1181번 - 단어 정렬 (C++/파이썬) 문제 및 풀이 (0) | 2021.04.14 |
[백준] 2437번 - 저울 (C++/파이썬) (0) | 2021.04.13 |
[백준] 2503번 - 숫자야구 (C++) 문제 및 풀이 (0) | 2021.04.13 |
[백준] 2579번 - 계단 오르기(C++/파이썬) 문제 및 풀이 (0) | 2021.04.09 |
댓글