어흥

[백준 1991] 트리 순회 (C++) 본문

알고리즘/백준

[백준 1991] 트리 순회 (C++)

라이언납시오 2020. 3. 18. 20:30
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/1991

 

1991번: 트리 순회

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

www.acmicpc.net

1. 주의할 점

- Node 구조체를 만들 줄 알아야한다.

 

2. 구현

- Node 구조체를 만든 이후 Nodes 배열을 생성한다.

- 각 Node를 생성해준다

- 입력받은 순서에 따라 Node를 연결해준다

 

#include <iostream>
using namespace std;

struct node {
	node* left;
	node* right;
	char val;
};

void preorder(node* n) {
	cout << n->val;
	if (n->left != NULL)
		preorder(n->left);
	if (n->right != NULL)
		preorder(n->right);
}

void inorder(node* n) {
	if (n->left != NULL)
		inorder(n->left);
	cout << n->val;
	if (n->right != NULL)
		inorder(n->right);
}

void postorder(node* n) {
	if (n->left != NULL)
		postorder(n->left);
	if (n->right != NULL)
		postorder(n->right);
	cout << n->val;
}

int main() {
	int num;
	char m, l, r;
	node nodes[26];
	cin >> num;
	for (int i = 0; i < num; i++) {
		nodes[i].val = i+'A';
		nodes[i].left = NULL;
		nodes[i].right = NULL;
	}
	for (int i = 0; i < num; i++) {
		cin >> m >> l >> r;
		if (l != '.')	nodes[m - 'A'].left = &nodes[l - 'A'];
		if (r != '.')	nodes[m - 'A'].right = &nodes[r - 'A'];
	}
	preorder(&nodes[0]);
	cout << '\n';
	inorder(&nodes[0]);
	cout << '\n';
	postorder(&nodes[0]);
	cout << '\n';
	system("pause");
	return 0;
}
728x90
반응형
Comments