5639번: 이진 검색 트리
트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다
www.acmicpc.net
풀이
<트리 자료구조 생성>
Node 클래스를 생성하고, 클래스 내에 int value, Node left, Node right 인스턴스 변수를 생성하여 각각 노드 값, 왼쪽 자식 노드, 오른쪽 자식 노드를 저장한다.
static class Node {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
}
static 변수로 루트 노드 Node root을 생성한다.
static Node root; //트리의 루트 노드
입력을 받을 때마다 createNode() 함수를 호출하고, root가 null이면 root 노드를 생성하고, root가 이미 있다면 insertNodePreOrder() 함수를 호출하여 올바른 위치에 노드를 삽입한다.
static void createNode(int n) {
if (root == null) {
root = new Node(n);
}
else insertNodePreOrder(root, n);
}
static void insertNodePreOrder(Node node, int value) {
if (node.value < value) {
if (node.right == null) {
node.right = new Node(value);
}
else
insertNodePreOrder(node.right, value);
}
else if (node.value > value) {
if (node.left == null) {
node.left = new Node(value);
}
else
insertNodePreOrder(node.left, value);
}
}
그 후 트리를 후위 순회를 한 결과를 출력하면 된다.
주의할 점
- 트리를 전위 순회한 결과를 입력으로 받을 때, null이 주어지면 입력을 받는 것을 중단해야 한다.
코드
import java.io.*;
public class Main {
static class Node {
int value;
Node left;
Node right;
public Node(int value) {
this.value = value;
}
}
static Node root; //트리의 루트 노드
static StringBuilder sb = new StringBuilder(); //출력 결과
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String input = br.readLine();
if (input == null)
break;
int n = Integer.parseInt(input);
createNode(n);
}
postOrder(root); //후위 순회
sb.append("\n");
System.out.println(sb);
}
static void createNode(int n) {
if (root == null) {
root = new Node(n);
}
else insertNodePreOrder(root, n);
}
static void insertNodePreOrder(Node node, int value) {
if (node.value < value) {
if (node.right == null) {
node.right = new Node(value);
}
else
insertNodePreOrder(node.right, value);
}
else if (node.value > value) {
if (node.left == null) {
node.left = new Node(value);
}
else
insertNodePreOrder(node.left, value);
}
}
static void postOrder (Node node) {
if (node == null) return;
postOrder(node.left);
postOrder(node.right);
sb.append(node.value).append("\n");
}
}
728x90
'Algorithm 문제 풀이 > 백준' 카테고리의 다른 글
[백준] 20164번 : 홀수 홀릭 호석 - 자바[Java] (0) | 2023.03.16 |
---|---|
[백준] 3190번 : 뱀 - 자바[Java] (0) | 2022.12.16 |
[백준] 1991번 : 트리 순회 - 자바[Java] (0) | 2022.11.20 |
[백준] 11725번 : 트리의 부모 찾기 - 자바[Java] (0) | 2022.11.20 |
[백준] 1197번 : 최소 스패닝 트리(MST) - 자바[Java] (0) | 2022.11.19 |