본문 바로가기
CodingTest/백준

[c++] 백준 - 1991: 트리 순회

by Daybreak21 2023. 5. 24.

1991번: 트리 순회 (acmicpc.net)

 

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