jissue
SSUE's IT World
jissue
전체 방문자
오늘
어제
  • 분류 전체보기 (88)
    • CS (4)
    • 자료구조 (5)
    • 알고리즘 (30)
      • 백준 (28)
      • 프로그래머스 (2)
    • JAVA (0)
    • Spring Boot (0)
    • 가상화 (35)
      • VMware (23)
      • Docker (12)
    • sw 사관학교 정글 (13)
      • TIL (12)
    • 기타 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
jissue

SSUE's IT World

알고리즘/백준

[트리] 1991번 : 트리 순회

2023. 3. 19. 16:24
  • 관리
  • 글쓰기
  • 로그인
  • 로그아웃

 

- 출제 문제 

해당 문제는 그래프의 기본에 대해 배울 수 있는 문제이다.

입력 받은 이진트리에 대해 전위 순회 중위 순회, 우선 순회에 대해 실습할 수 있다. 

 

https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net


- 접근 방법

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

문제 내에서 위 글이 포인트인데 동일한 형식의 함수를 만들고 재귀의 순서를 전위/중위/후위로 나누어 구현하면 완성된다.

 

예를 들어 전위의 경우,

def preorder(root):
    if root != '.':
        print(root 자신,end='')
        preorder(root의 왼쪽 자식)
        preorder(root의 오른쪽 자식)

root는 출력으로 지정해 놓고 root의 왼쪽 자식과 오른쪽 자식을 각각 재귀로 구현하면 된다.

 

중위와 후위도 동일하게 진행한다.


- 완성 코드

import sys

N = int(sys.stdin.readline())
tree = {}
for i in range(N):
    root, left, right = sys.stdin.readline().split()
    tree[root]= [left,right]

# 전위(루트->왼쪽->오른쪽)
def preorder(root):
    if root != '.':
        print(root,end='')
        preorder(tree[root][0]) # root의 왼쪽 자식
        preorder(tree[root][1]) # root의 오른쪽 자식

# 중위(왼쪽->루트->오른쪽)
def inorder(root):
    if root !='.':
        inorder(tree[root][0]) # root의 왼쪽 자식
        print(root,end='')
        inorder(tree[root][1]) # root의 오른쪽 자식
        
# 후위(왼쪽->오른쪽->루트)
def postorder(root):
    if root != '.':
        postorder(tree[root][0]) # root의 왼쪽 자식
        postorder(tree[root][1]) # root의 오른쪽 자식
        print(root,end='')

preorder('A')
print()
inorder('A')
print()
postorder('A')

'알고리즘 > 백준' 카테고리의 다른 글

[트리] 1197번 : 최소 스패닝 트리  (0) 2023.03.19
[트리] 5639번 : 이진 검색 트리  (0) 2023.03.19
[스택] 10773번 : 제로  (0) 2023.03.09
[스택] 10828번 : 스택  (0) 2023.03.09
[스택] 9012번 : 괄호  (0) 2023.03.09
    '알고리즘/백준' 카테고리의 다른 글
    • [트리] 1197번 : 최소 스패닝 트리
    • [트리] 5639번 : 이진 검색 트리
    • [스택] 10773번 : 제로
    • [스택] 10828번 : 스택
    jissue
    jissue

    티스토리툴바