728x90
작년에 배운 자료구조도 오랜만에 복습할겸,
사실 지금 백준은 c++를 공부중이며 짜는 중이라 클래스 개념도 잡을겸
AC받은 코드를 보면서 카피해서 코딩했다.
전위 순회, 중위 순회 및 후위 순회의 출력 방식은 위에 자세히 설명되어 있고, 왼쪽 오른쪽을 탐색할때, 재귀함수가 필요한 부분은 그때마다 호출해서 출력해주면 된다.
나는 자료구조를 자바로 공부해서.. C++ 코드는 얼마나 다를까 봤는데 사실 문법빼곤 다 똑같아서 습득하는데는 얼마 걸리진 않았다.
나름 처음보고 신기했던(?) 문법은
- 1. public method를 public: 밑의 인덴트로 설정하는것
- 2. 클래스 메소드를 부를때는 클래스::메소드(파라미터) 형식
정도..
복습하면서 풀기 괜찮았던 문제.
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
|
#include <iostream>
#include <string>
using namespace std;
class Node {
string data;
Node *left, *right;
public:
Node() { data = ""; left = NULL; right = NULL; }
void setData(char data) { this->data = data; }
void setLeft(Node *left) { this->left = left; }
void setRight(Node *right) { this->right = right; }
void static preorder(Node *root) { // 전위
if (root) {
cout << root->data;
preorder(root->left);
preorder(root->right);
}
}
void static inorder(Node *root) { // 중위
if (root) {
inorder(root->left);
cout << root->data;
inorder(root->right);
}
}
void static postorder(Node *root) { // 후위
if (root) {
postorder(root->left);
postorder(root->right);
cout << root->data;
}
}
};
int main(void){
int n;
cin>>n;
Node *node = new Node[n];
for(int i=0; i<n; i++){
char data,left,right;
cin>>data>>left>>right;
if(data!='.')
node[(int)(data - 'A')].setData(data);
if(left!='.')
node[(int)(data-'A')].setLeft(&node[(int)left-'A']);
else
node[(int)(data-'A')].setLeft(NULL);
if(right!='.')
node[(int)(data-'A')].setRight(&node[(int)right-'A']);
else
node[(int)(data-'A')].setRight(NULL);
}
Node *root = &node[0];
Node::preorder(root);
cout<<"\n";
Node::inorder(root);
cout<<"\n";
Node::postorder(root);
cout<<"\n";
}
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 1931 회의실 배정-greedy algorithm(C++) (0) | 2020.01.15 |
---|---|
백준 10610 30 (greedy) - C++ (0) | 2020.01.14 |
백준 11725 트리의 부모찾기-C++ (0) | 2020.01.12 |
백준 2884 알람시계 (입출력)- C++ (0) | 2020.01.12 |
백준 2146 다리만들기 - bfs 2번 활용 (C++) (0) | 2020.01.12 |