[문제]
https://www.acmicpc.net/problem/5639
5639번: 이진 검색 트리
문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다. 왼쪽, 오른쪽 서브트리도 이진 검색 트리이다. 전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리,
www.acmicpc.net
[풀이]
5639 | 맞았습니다!! | 2572 | 96 | C++14 / 수정 | 1235 | 36초 전 |
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#include <iostream>
using namespace std;
//이진 검색 트리
typedef struct Node {
int data;
struct Node *left, *right;
};
void insertNode(Node* node, int data) {
Node* parent;
Node* tmp;
Node* newNode;
parent = NULL;
tmp = node;
while(tmp != NULL) {
parent = tmp;
if (tmp->data > data) {
//왼쪽으로 간다.
if (tmp->left != NULL)
tmp = tmp->left;
else
break; //그 자리에 자리잡는다.
}
else {
//오른쪽으로 간다.
if (tmp->right != NULL)
tmp = tmp->right;
else break;
}
}//while
newNode = new Node;
//새로 넣어줄 노드
if (parent->data > data) {
//수가 들어갈 수 있는 자리를 만들어준다.
parent-> left = newNode;
}
else
parent->right = newNode;
newNode->data= data;
newNode->left = NULL;
newNode->right = NULL;
}
void postOrder(Node *root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
cout << root->data <<'\n';
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int tmp;
cin >> tmp;
Node *root = new Node;
root-> data = tmp;
root-> left= NULL;
root-> right = NULL;
while(cin>>tmp) {
insertNode(root, tmp);
}
postOrder(root);
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'BOJ > C++' 카테고리의 다른 글
[BOJ] 집합의 표현 (0) | 2019.08.09 |
---|---|
[BOJ] 트리인가? (0) | 2019.08.09 |
[BOJ] 트리순회 (0) | 2019.08.09 |
[BOJ] 캐슬디펜스 (0) | 2019.08.08 |
[BOJ] 파이프옮기기1 (0) | 2019.08.08 |