본문 바로가기
PS(Problem Solving)/백준_BOJ

[백준] 1991번 - 트리 순회 (C++/파이썬)

by 초코칩프라푸치노 2021. 4. 14.

문제) 백준 - 트리 - 트리 순회

-> www.acmicpc.net/problem/1991

 

1991번: 트리 순회

첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자

www.acmicpc.net

 

기본적인 트리 순회 문제. 트리 문제라 해서 struct, Tree에 얽매이지 말자.

 

 

 

C++ 소스 코드)

 

#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;
}
view raw 1991.cpp hosted with ❤ by GitHub

 

파이썬 소스 코드)

 

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'])
view raw 1991.py hosted with ❤ by GitHub

 

 

반응형

댓글