Skip to content

Commit

Permalink
[Silver I] Title: 트리 순회, Time: 32 ms, Memory: 31120 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
Youn-Rha committed Dec 2, 2024
1 parent e46b581 commit 2be321d
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 0 deletions.
40 changes: 40 additions & 0 deletions 백준/Silver/1991. 트리 순회/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# [Silver I] 트리 순회 - 1991

[문제 링크](https://www.acmicpc.net/problem/1991)

### 성능 요약

메모리: 31120 KB, 시간: 32 ms

### 분류

재귀, 트리

### 제출 일자

2024년 12월 2일 17:30:40

### 문제 설명

<p>이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.</p>

<p style="text-align: center;"><img alt="" src="https://www.acmicpc.net/JudgeOnline/upload/201007/trtr.png" style="height:220px; width:265px"></p>

<p>예를 들어 위와 같은 이진 트리가 입력되면,</p>

<ul>
<li>전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)</li>
<li>중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)</li>
<li>후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)</li>
</ul>

<p>가 된다.</p>

### 입력

<p>첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현한다.</p>

### 출력

<p>첫째 줄에 전위 순회, 둘째 줄에 중위 순회, 셋째 줄에 후위 순회한 결과를 출력한다. 각 줄에 N개의 알파벳을 공백 없이 출력하면 된다.</p>

47 changes: 47 additions & 0 deletions 백준/Silver/1991. 트리 순회/트리 순회.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import sys

def input():
return sys.stdin.readline().strip()

class Node:
def __init__(self, item, left, right):
self.item = item
self.left = left if left != '.' else None
self.right = right if right != '.' else None

def preorder(self):
print(self.item, end="")
if self.left is not None:
tree[self.left].preorder()
if self.right is not None:
tree[self.right].preorder()

def inorder(self):
if self.left is not None:
tree[self.left].inorder()
print(self.item, end="")
if self.right is not None:
tree[self.right].inorder()

def postorder(self):
if self.left is not None:
tree[self.left].postorder()
if self.right is not None:
tree[self.right].postorder()
print(self.item, end="")

# main
if __name__ == "__main__":
N = int(input())
tree = {}

for _ in range(N):
A, B, C = input().split()
tree[A] = Node(A, B, C)

tree['A'].preorder()
print()
tree['A'].inorder()
print()
tree['A'].postorder()
print()

0 comments on commit 2be321d

Please sign in to comment.