Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • 세그먼트 트리
  • 이분탐색
  • 수학
  • UC++
  • 백트래킹
  • 정수론
  • 트라이
  • 최소 스패닝 트리
  • 구현
  • 스택
  • 큐
  • 그래프
  • SCC
  • LCA
  • 문자열
  • 조합론
  • 우선순위큐
  • 누적합
  • 동적계획법
  • 위상 정렬
  • 투포인터
  • 트리
  • 기하
  • 백준
  • 유니온 파인드
  • KMP
  • 정렬
  • C++
  • 브루트포스
  • 분할정복

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite
공부 및 정리/백준 코드

[C++]백준 - 1991번 문제

[C++]백준 - 1991번 문제
공부 및 정리/백준 코드

[C++]백준 - 1991번 문제

2021. 9. 20. 03:18

1991번: 트리 순회 (acmicpc.net)

 

1991번: 트리 순회

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

www.acmicpc.net

 

1991번 : 트리 순회


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

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

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

 

입력


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

 

 

출력


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

 

 

 


 

생각해 볼 점


전위 순회, 중위 순회, 후위 순위를 차례로 구현합니다.

 

순회는 함수로 구현하였으며, 재귀의 형식으로 진행됩니다.

 

코드


#include <iostream>
using namespace std;
pair<int, int> *bin_tree;

//전위 순회
void pre_order(int current)
{    
    char node = current + 65;
    printf("%c", node);
    int left = bin_tree[current].first;
    int right = bin_tree[current].second;
    if(0 <= left) pre_order(left);
    if(0 <= right) pre_order(right);
}

//중위 순회
void in_order(int current)
{
    char node = current + 65;
    int left = bin_tree[current].first;
    int right = bin_tree[current].second;
    if(0 <= left) in_order(left);
    printf("%c", node);
    if(0 <= right) in_order(right);
}

//후위 순회
void post_order(int current)
{
    char node = current + 65;
    int left = bin_tree[current].first;
    int right = bin_tree[current].second;
    if(0 <= left) post_order(left);
    if(0 <= right) post_order(right);
    printf("%c", node);
}



int main() 
{
    int N;
    cin >> N;
    
    //트리
    bin_tree = new pair<int, int>[N];
    
    //대문자 알파벳 - 65 = int
    for(int i = 0; i < N; i++)
    {
        char node, left, right;
        cin >> node >> left >> right;
        int i_node = node - 65;
        bin_tree[i_node] = make_pair(left - 65, right - 65);
    }
    pre_order(0);
    printf("\n");
    in_order(0);
    printf("\n");
    post_order(0);
    
    
    delete[] bin_tree;
	return 0;
}

 

그 외


 

저작자표시 (새창열림)

'공부 및 정리 > 백준 코드' 카테고리의 다른 글

[C++]백준 - 14002번 문제  (0) 2021.09.22
[C++]백준 - 1450번 문제  (0) 2021.09.22
[C++]백준 - 1967번 문제  (0) 2021.09.20
[C++]백준 - 1167번 문제  (0) 2021.09.18
[C++]백준 - 11725번 문제  (0) 2021.09.18
  • 1991번 : 트리 순회
  • 입력
  • 출력
  • 생각해 볼 점
  • 코드
  • 그 외
'공부 및 정리/백준 코드' 카테고리의 다른 글
  • [C++]백준 - 14002번 문제
  • [C++]백준 - 1450번 문제
  • [C++]백준 - 1967번 문제
  • [C++]백준 - 1167번 문제
Plite
Plite
개발 일지, 게임 이야기 등을 적어두는 공간입니다.

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.