728x90
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// [백준 5639 c++ V] 이진 검색 트리
// 문제: 이진트리 전위순회가 주어지면 후위순회 출력
// 접근: 전위입력으로 이진트리 생성 후 -> 후위순회
// 시간복잡도: O(전위순회 입력+ 후위순회 재귀)
// 접근2: 이진트리를 생성하지 않고 풀이 -> 참고풀이들 이해가 안됌.
// 풀이1:
// 이진트리 2차원 배열로 구현
// 전위순회입력으로 이진트리 생성 , 처음 루트만 따로 저장
// 이진트리 후위순회 재귀 출력
#define MAX 1000001
int tree[MAX][2]; // 이진트리
// 전위순회 입력
void insert(int root,int node) {
if (node < root) {
if (tree[root][0] == 0) {
tree[root][0] = node;
return;
}
else { insert(tree[root][0], node);}
}
else if (node > root) {
if (tree[root][1] == 0) {
tree[root][1] = node;
return;
}
else { insert(tree[root][1], node);}
}
}
void postorder(int node) {
if (tree[node][0] != 0) { postorder(tree[node][0]); } // 왼자식
if (tree[node][1] != 0) { postorder(tree[node][1]); } // 오른자식
cout << node << '\n';
}
int main() {
ios::sync_with_stdio(false); // 계산시간 단축 // cin,scanf 같이 쓰면 오류
cin.tie(nullptr); cout.tie(nullptr);// 입출력 시간 단축 // 이것을 쓰면 scanf,printf섞어 쓰면 안됨
int node, root = 0;
while (cin >> node) {
if (root == 0) { root = node; } // 루트노드
else insert(root, node);
}
postorder(root); // 후위순회
return 0;
}
|
cs |
반응형
'Algorithm_BOJ(백준) > 트리' 카테고리의 다른 글
[백준 9934 c++ V] 완전 이진 트리 (0) | 2023.01.24 |
---|---|
[백준 11725 c++ VV] 트리의 부모 찾기 (0) | 2023.01.24 |
[백준 1991 c++ V] 트리 순회 (0) | 2021.09.05 |
[백준 11725 c++ V] 트리의 부모 찾기 (0) | 2021.09.05 |