반응형
알고리즘 종류
- 트리
- 그래프
사고 과정
- 전위 순회로 이진트리 만드는 방법
1. 전위 순회는 root를 먼저 출력하고 자식들을 출력하기 때문에 맨 앞에 root가 나오게 된다. 따라서 전위 순회를 순서대로 넣어주면 이진트리를 만들 수 있다.
구현(C++)
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
|
#include <iostream>
#include <vector>
using namespace std;
struct Node{
int data;
Node *left = NULL;
Node *right = NULL;
};
void make_tree(Node *p, int num){
Node *node = new Node;
node->data = num;
Node *tmp;
while(p){
tmp = p;
if(p->data < num) p = p->right;
else p = p->left;
}
if(num < tmp->data) tmp->left = node;
else tmp->right = node;
}
void post_order(Node *p){
if(p != NULL){
post_order(p->left);
post_order(p->right);
cout << p->data << '\n';
}
}
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
Node *root = new Node;
cin >> root->data;
int num;
while(cin >> num){
make_tree(root, num);
}
post_order(root);
}
|
cs |
- 배열을 이용한 트리 탐색
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 | #include <iostream> #include <vector> using namespace std; struct Node{ int left=0; int right=0; }; Node tree[1000001]; void insert(int p, int data){ if(p<data){ if(tree[p].right == 0) tree[p].right = data; else insert(tree[p].right, data); } else { if(tree[p].left == 0) tree[p].left = data; else insert(tree[p].left, data); } } void post_order(int p){ if(p != 0){ post_order(tree[p].left); post_order(tree[p].right); cout << p << "\n"; } } int main(void){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); int root; cin >> root; int num; while(cin >> num){ insert(root, num); } post_order(root); } | cs |
시행착오
- 이진트리 만드는 방법을 배울 수 있었다.
반응형
'코딩 공부 > 백준' 카테고리의 다른 글
[백준][C++] 10993 별 찍기 - 18 (0) | 2021.03.12 |
---|---|
[백준][C++] 2665 미로만들기 (0) | 2021.03.04 |
[백준][C++] 18808 스티커 붙이기 (0) | 2021.03.03 |
[백준][C++] 12904 A와 B (0) | 2021.03.03 |
[백준][C++] 2116 주사위 쌓기 (0) | 2021.03.02 |