티스토리 뷰

Algorithm/BOJ

백준 5639번 C++

poopooreum 2023. 8. 20. 20:57
반응형
백준 5639번 이진 검색 트리

https://www.acmicpc.net/problem/5639

5639번: 이진 검색 트리

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

www.acmicpc.net



정답 코드

#include<iostream>
using namespace std;
struct node {
	int data;
	node* left;
	node* right;
};
node* insert(node* root, int data) {
	if (root == NULL) {
		root = new node();
		root->data = data;
		root->left = NULL;
		root->right = NULL;
	}
	else if (root->data < data)
		root->right = insert(root->right, data);
	else
		root->left = insert(root->left, data);
	return root;
}
void postorder(node *root) {
	if (root) {
		postorder(root->left);
		postorder(root->right);
		cout << root->data << '\n';
	}
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int input;
	node* root = NULL;
	while (cin >> input) {
		root = insert(root, input);
	}
	postorder(root);

}

문제 풀이

트리 구조를 구성하기 위해 구조체를 사용하였습니다. 트리에 원소를 삽입하는 insert함수와 전위순회하는 postorder함수 두 개를 생성하였습니다.
전위순회는 간단히 구현하였습니다. root가 null이 아니라면 루트가 가리키는 left를 방문하고 그 다음 root라 가리키는 right를 방문합니다. 이렇게 postorder함수를 계속 호출하면 재귀형식이 되기 때문에 root를 기준으로 좌측을 다 출력하면 root로 돌아간 뒤 root기준 우측값을 다 출력하게 됩니다.
insert함수는 세 가지 경우를 나누었습니다. 루트가 null일때, 루트 좌측이 삽입한 원소보다 작을 때, 클 때입니다. 만약 루트가 null이라면 새로운 구조체를 생성한 후 루트에 데이터를 삽입하고 left,right를 null값으로 처리합니다. 이후에 값이 들어와야 하기 때문입니다.
root가 null이 아니라면 이미 원소가 있는 것이기 때문에 새로 삽입하는 원소와 비교를 하여 좌측으로 갈지 우측으로 갈지 결정하게 하였습니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 6219번 C++  (0) 2023.08.21
백준 5800번 C++  (0) 2023.08.21
백준 5622번 C++  (0) 2023.08.20
백준 5597번 C++  (0) 2023.08.20
백준 5522번 C++  (2) 2023.08.20
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함