어흥

[백준 5639] 이진 검색 트리 (C++) 본문

알고리즘/백준

[백준 5639] 이진 검색 트리 (C++)

라이언납시오 2020. 6. 14. 20:11
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/5639

 

5639번: 이진 검색 트리

문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 �

www.acmicpc.net

1. 주의할 점

- EOF를 입력받을 때 까지 수를 받기 위해 While(cin>>val) 을 사용한다. While(!cin.eof()) 사용하면 오답으로 뜬다

 

2. 구현

- Insert() 함수를 통해 현재 Node가 NULL이라면 새로 Node를 만든 후, 추가하고 NULL이 아니라면 현재 Node의 Data값과 비교하여 작다면 Node->left로, Node->right로 이동후, 다시 검사한다

- Postorder() 함수를 사용하여 Root Node의 후위순위를 출력한다

 

#include <iostream>
using namespace std;

struct Node {
	int data;
	Node* left;
	Node* right;
};

Node* insert(Node* node, int data) {
	if (node == NULL) {
		node = new Node();
		node->data = data;
		node->left = node->right = NULL;
	}
	else if (data <= node->data)
		node->left = insert(node->left, data);
	else
		node->right = insert(node->right, data);
	return node;
}

void postorder(Node* node) {
	if (node->left != NULL)
		postorder(node->left);
	if (node->right != NULL)
		postorder(node->right);
	cout << node->data << '\n';
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	Node* root = NULL;
	int val;
	while (cin>>val) {
		if (val == EOF) break;
		root = insert(root, val);
	}
	postorder(root);
	return 0;
}
728x90
반응형
Comments