1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
C++로 쉽게 풀어쓰는 자료구조' 란 책에 나오는 트리 코드를 참고하여 작성하였습니다.
#include <iostream>
using namespace std;
class BinaryNode {
protected:
char data;
BinaryNode* left;
BinaryNode* right;
public:
BinaryNode(char val) : data(val), left(NULL), right(NULL) { }
void setData(char val) { data = val; }
void setLeft(BinaryNode* l) { left = l; }
void setRight(BinaryNode* r) { right = r; }
char getData() { return data; }
BinaryNode* getLeft() { return left; }
BinaryNode* getRight() { return right; }
void inorder() {
if (left != NULL) left->inorder();
if (data != '.') printf("%c", data);
if (right != NULL) right->inorder();
}
void preorder() {
if (data != '.') printf("%c", data);
if (left != NULL) left->preorder();
if (right != NULL) right->preorder();
}
void postorder() {
if (left != NULL) left->postorder();
if (right != NULL) right->postorder();
if (data != '.') printf("%c", data);
}
BinaryNode* search(char key) {
if (key == data) return this;
if (left != nullptr) {
BinaryNode* result = left->search(key);
if (result != nullptr) return result;
}
if (right != nullptr) {
BinaryNode* result = right->search(key);
if (result != nullptr) return result;
}
return nullptr;
}
};
int main() {
int N; cin >> N; char prn, tmp1, tmp2;
BinaryNode* root = new BinaryNode('A');
for (int i = 0; i < N; i++) {
cin >> prn >> tmp1 >> tmp2;
BinaryNode* tmp = root->search(prn);
tmp->setLeft(new BinaryNode(tmp1));
tmp->setRight(new BinaryNode(tmp2));
}
root->preorder(); cout << endl;
root->inorder(); cout << endl;
root->postorder();
return 0;
}
'CodingTest > 백준' 카테고리의 다른 글
[c++] 백준 - 10250번: ACM 호텔 (0) | 2023.05.28 |
---|---|
[c++] 백준 - 4153: 직각삼각형 (0) | 2023.05.26 |
[c++] 백준 - 10773: 제로 (1) | 2023.05.21 |
[c++] 백준 - 8979번: 올림픽 (0) | 2023.05.21 |
[c++] 백준 - 2577: 숫자의 개수 (0) | 2023.05.21 |