반응형
출처: http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=989&sca=50&page=7
Input
5 3 11 7 -1 -1 2 -1 -1 -1 8 13 -1 -1 4 -1 1 -1 -1
Output
7 2 11 3 13 1 4 8 5
preorder로 입력된 데이터를 postorder로 출력하는 문제입니다.
단말 노드에는 -1이 입력되며, 노드 번호의 최대값 = 20
- 전위(preorder) 순회: Root → 왼쪽 자식 → 오른쪽 자식
- 후위(postorder) 순회: 왼쪽 자식 → 오른쪽 자식 → Root
※ 재귀 호출로도 이 문제를 구현할 수 있습니다.
#include <stdio.h>
int main() {
int num;
scanf("%d", &num);
if (num < 0)
return 0;
main();
main();
printf("%d ", num);
return 0;
}
동적 할당
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Node {
int data;
Node* lch, *rch;
Node(){}
Node(int nd) {
data = nd;
lch = rch = NULL;
}
};
struct Tree {
Node* head;
void build(){
head = input();
}
Node* input(){
int data;
scanf("%d", &data);
if(data < 0) return NULL;
Node* obj = new Node(data);
obj->lch = input();
obj->rch = input();
return obj;
}
};
void postOrder(Node* now){
if(now == NULL) return;
postOrder(now->lch);
postOrder(now->rch);
printf("%d ", now->data);
}
int main() {
// freopen("input.txt", "r", stdin);
Tree* tree = new Tree;
tree->build();
postOrder(tree->head);
}
정적 할당
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct Node {
int data;
Node* lch, *rch;
Node* alloc(int nd) {
data = nd;
lch = rch = NULL;
return this;
}
}buf[30];
int bcnt;;
struct Tree {
Node* head;
void build(){
head = input();
}
Node* input(){
int data;
scanf("%d", &data);
if(data < 0) return NULL;
Node* obj = buf[bcnt++].alloc(data);
obj->lch = input();
obj->rch = input();
return obj;
}
};
void postOrder(Node* now){
if(now == NULL) return;
postOrder(now->lch);
postOrder(now->rch);
printf("%d ", now->data);
}
int main() {
// freopen("input.txt", "r", stdin);
Tree* tree = new Tree;
tree->build();
postOrder(tree->head);
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 2058 고돌이 고소미 (0) | 2021.02.26 |
---|---|
[Jungol] 정올 1148 최종 울트라-퀵 소트 (0) | 2021.02.23 |
[Jungol] 정올 3519 Tutorial : 합병(병합)정렬(Merge Sort) (0) | 2021.02.23 |
[Jungol] 정올 1889 N Queen (0) | 2021.02.23 |
[Jungol] 정올 1901 소수 구하기 (0) | 2021.02.21 |
댓글