[C] 백준 1991 트리 순회

z00m__in·2021년 6월 26일
0

Algorithm - Tree

목록 보기
3/4

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

문제

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

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

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

가 된다.

제출 25000 정답 비율 64%





코드

#include <stdio.h>
#include <stdlib.h>

int N = 0;

struct tree {
	char left, right;
};
struct tree arr[50];

void front(char root) {
	//전위: 루트-왼-오
	if (root == '.')
		return;
	printf("%c", root);
	front(arr[root].left);
	front(arr[root].right);
}

void mid(char root) {
	//중위: 왼-루트-오
	if (root == '.')
		return;
	mid(arr[root].left);
	printf("%c", root);
	mid(arr[root].right);
}

void back(char root) {
	//후위: 왼-오-루트
	if (root == '.')
		return;
	back(arr[root].left);
	back(arr[root].right);
	printf("%c", root);
}

void main() {
	scanf("%d", N);

	char a, b, c;
	for (int i = 0; i < N; i++) {
		scanf("%c %c %c", &a, &b, &c);
		arr[a].left = b; arr[a].right = c;
	}

	front('A'); printf("\n");
	mid('A'); printf("\n");
	back('A'); printf("\n");
}
profile
우당탕탕 기록지

0개의 댓글