‡ CODING TEST STUDY ‡/º 백준

[백준 1991번 C++] 트리 순회

Trudy | 송연 2023. 11. 12. 02:05

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

1991번: 트리 순회

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

www.acmicpc.net


이해하기 


트리 순회 3가지

전위 순회 (preorder) : 현재 노드 - 왼쪽 노드 - 오른쪽 노드
중위 순회 (inorder) : 왼쪽 노드 - 현재 노드 - 오른쪽 노드
후위 순회 (postorder) : 왼쪽 노드 - 오른쪽 노드 - 현재 노드

위 3가지 트리 순회는 해당하는 순서대로 함수로 재귀적으로 호출해 구현할 수 있다.
 
[백준] 1991번 : 트리 순회 [C/C++] — 백준 하루 한 문제 (tistory.com)

[백준] 1991번 : 트리 순회 [C/C++]

#문제 1991번: 트리 순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노

rujang.tistory.com

[백준/C++]#1991 - 트리 순회 (tistory.com)

[백준/C++]#1991 - 트리 순회

풀이 #include using namespace std; int a[50][2]; void preorder (int N) { if (N == -1) return; cout x >> y >> z;// 알파벳 입력 x = x-'A';// 문자 -> 숫자 변환 if (y == '.') {// 입력이 .이면 그 자리에 -1 대입 a[x][0] = -1; } else { a[x

etyoungsu.tistory.com

 


최종코드

#include <iostream>
using namespace std;

int a[50][2];

//전위 순회 
void preorder (int n) {
	if (n == -1) return;
	cout << (char)(n+'A');
	preorder(a[n][0]);
	preorder(a[n][1]);
}

//중위 순회
void inorder (int n) {
	if (n == -1) return;
	inorder(a[n][0]);
	cout << (char)(n+'A');
	inorder(a[n][1]);
}

//후위 순회
void postorder (int n) {
	if (n == -1) return;
	postorder(a[n][0]);
	postorder(a[n][1]);
	cout << (char)(n+'A');
}

int main() {
	int n;
	cin >> n;
	for (int i=0; i<n; i++) {
		char x, y, z;
		cin >> x >> y >> z;	
		x = x-'A';		// char to int 

      //주어진 트리를 저장
      
      //왼쪽 노드가 없는 경우
		if (y == '.') {	
			a[x][0] = -1;
		}
		else {
			a[x][0] = y-'A';
		}
      //왼쪽 노드가 없는 경우
		if(z == '.') {
			a[x][1] = -1;
		}
		else {
			a[x][1] = z-'A';
		}
	}
	preorder(0); cout << '\n';
	inorder(0); cout << '\n';
	postorder(0);

	return 0;
}