1991번: 트리 순회 (acmicpc.net)
## 풀이
문제에서 주어진대로 트리를 만들고
전위 중위 후위 순회 결과를 출력하면 된다
##code
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct Node{
char data;
struct Node* left;
struct Node* right;
} Node;
Node* MakeNode(char root){
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = root;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void connect(Node* node, Node* add){
if(node->left != NULL){
if (node->left->data == add->data){
free(node->left);
node->left = add;
}
else{
connect(node->left,add);
}
}
if(node->right != NULL){
if (node->right->data == add->data){
free(node->right);
node->right = add;
}
else{
connect(node->right,add);
}
}
}
void preorder(Node* node){
cout << node->data;
if(node->left != NULL)
preorder(node->left);
if(node->right != NULL)
preorder(node->right);
}
void inorder(Node* node){
if(node->left != NULL)
inorder(node->left);
cout << node->data;
if(node->right != NULL)
inorder(node->right);
}
void postorder(Node* node){
if(node->left != NULL)
postorder(node->left);
if(node->right != NULL)
postorder(node->right);
cout << node->data;
}
int main() {
cin.tie(0); cout.tie(0); // fastio
ios::sync_with_stdio(0); // fastio
// 풀이 작성
int N;
cin >> N;
char root,l,r;
cin >> root >> l >> r;
Node* Root = MakeNode(root);
if (l != '.'){
Node* Left = MakeNode(l);
Root->left = Left;
}
if (r != '.'){
Node* Right = MakeNode(r);
Root->right = Right;
}
for (int i = 0; i < N-1; i++)
{
cin >> root >> l >> r;
Node* Add = MakeNode(root);
if (l != '.'){
Node* Left = MakeNode(l);
Add->left = Left;
}
if (r != '.'){
Node* Right = MakeNode(r);
Add->right = Right;
}
connect(Root,Add);
}
preorder(Root);
cout << endl;
inorder(Root);
cout << endl;
postorder(Root);
return 0;
}
python으로 하다가 class짜는데 좀 조잡스럽다는 생각도 들고 학교 수업때 c로 해봐서
c++로 제출해봐야겠다 싶어서 c++로 만들었다
출력부분은 간단한데
만들고 연결하는 부분이 살짝...
#include<bits/stdc++.h>
using namespace std;
int N;
char L[200], R[200];
void Pre(char n) {
printf("%c",n);
if(L[n] != '.') Pre(L[n]);
if(R[n] != '.') Pre(R[n]);
}
void In(char n) {
if(L[n] != '.') In(L[n]);
printf("%c",n);
if(R[n] != '.') In(R[n]);
}
void Post(char n) {
if(L[n] != '.') Post(L[n]);
if(R[n] != '.') Post(R[n]);
printf("%c",n);
}
int main() {
scanf("%d",&N);
for(int i=0; i<N; i++) {
char a,b,c;
scanf("\n%c %c %c",&a,&b,&c);
L[a] = b;
R[a] = c;
}
Pre('A');
printf("\n");
In('A');
printf("\n");
Post('A');
return 0;
}
다른 사람 풀이인데 보통 c++로 풀면 구조체를 잘 안쓰나
c++로 하다보면 알게되겠지...
0 댓글