본문 바로가기

BOJ/C++

[BOJ] 이진검색 트리

[문제]

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