[C++]이진 검색 트리(순회) - 백준5639
문제
풀이
문제 해석을 하자면,
- 이진 검색 트리의 순회 문제이다.
- 문제에서 이진 검색 트리를 전위 순회한 결과를 입력으로 주어지면, 후위 순회한 결과를 출력해야 한다.
풀이
- 전위->후위 바로 구하는법은 모르겠지만,
- 전위를 통해서 BST를 구하고, 후위 순회는 구할 수 있을것 같다.
- 입력 끝까지 받는 EOF 관련해서 다시 기억해두자.
-
while()
문 내에서cin
사용해서 EOF 확인하면 자동으로 탈출해주므로while(cin>>inNum)
형태로 사용할 것
-
코드
#include<iostream>
#include<vector>
using namespace std;
struct node {
int key=0;
node* left = nullptr;
node* right = nullptr;
};
typedef node* Node;
void insert(Node root, Node n1) {
if (root->key < n1->key) {
if (root->right != nullptr) {
insert(root->right, n1);
}
else {
root->right = n1;
}
}
else if (root->key > n1->key) {
if (root->left != nullptr) {
insert(root->left, n1);
}
else {
root->left = n1;
}
}
}
void postOrder(Node root) {
if (root->left != nullptr)
postOrder(root->left);
if (root->right != nullptr)
postOrder(root->right);
cout << root->key << '\n';
}
int main() {
// 전위 순회는 처음값 무조건 root
int inNum = 0;
cin >> inNum;
Node root = new node();
root->key = inNum;
while (cin >> inNum) { // 이곳에 cin 넣어야 EOF보고 자동으로 종료 해줌
// 종료시점(테스트할때 EOF는 Ctrl+Z 입력시 발생시킬 수 있음)
Node n1 = new node();
n1->key = inNum;
// 1. insert함수를 통해서 root부터 자기자리 찾아가서 넣어주자.
insert(root, n1);
}
// 2. 이후 postOrder 함수를 통해서 후위순회 구하자.
postOrder(root);
return 0;
}
느낀점
EOF 햇갈리지말자.
그리고 BST는 문제가 복잡할 경우엔 구현하는짓은 하지말자.
왠만하면 set, map같은 자료구조를 이용하던지 다른 방법을 찾던지 하자.
댓글남기기