알고리즘 문제/C++

[백준] 5639번 : 이진 검색 트리 - C++

lingk 2021. 1. 4. 23:07

문제

www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다

www.acmicpc.net


코드

Binary Search Tree를 직접 구현하여 풀었다.

#include <iostream>

using namespace std;

class Node{
public:
    int value;
    Node *right;
    Node *left;
    Node(){value = 0; right = NULL; left = NULL;}
    Node(int data){value = data;right = NULL; left = NULL;}
    void setRight(Node *node){this->right = node;}
    void setLeft(Node *node){this->left = node;}
};
class Tree{
public:
    Node *rootNode;
    Tree(){rootNode = NULL;}
    void insert(int data);
    void display();
    void display(Node *node);
};
void Tree::insert(int data){
    Node *node = new Node(data);
    if (rootNode == NULL) {rootNode = node;return;}
    Node *cursor = rootNode;
    while(1){
        int value = cursor -> value;
        if(value < data){
            if (cursor->right == NULL){
                cursor->setRight(node);
                break;
            }else
                cursor = cursor->right;
        }else{
            if(cursor->left == NULL){
                cursor->setLeft(node);
                break;
            }else
                cursor = cursor->left;
        }
    }
    return;
}
void Tree::display(){
    Node *cursor = rootNode;
    display(cursor);
}
void Tree::display(Node *cursor){
    if(cursor->left != NULL)
        display(cursor->left);
    if(cursor->right != NULL)
        display(cursor->right);
    cout << cursor->value<<endl;
}

int main() {
    Tree tree = Tree();
    int temp;
    while(cin >> temp) {
        if(temp == EOF)break;
        tree.insert(temp);
    }
    tree.display();
}
반응형