이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다.
전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예를 들어, 위의 이진 검색 트리의 전위 순회 결과는 50 30 24 5 28 45 98 52 60 이고, 후위 순회 결과는 5 28 24 45 30 60 52 98 50 이다.
이진 검색 트리를 전위 순회한 결과가 주어졌을 때, 이 트리를 후위 순회한 결과를 구하는 프로그램을 작성하시오.
트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다.
입력으로 주어진 이진 검색 트리를 후위 순회한 결과를 한 줄에 하나씩 출력한다.
50
30
24
5
28
45
98
52
60
5
28
24
45
30
60
52
98
50
# 추후에 풀이 및 작성 예정
import java.io.*;
public class Main {
static class Node {
int num;
Node left, right;
Node(int _num) {
num = _num;
}
Node(int _num, Node _left, Node _right) {
num = _num;
left = _left;
right = _right;
}
void insert(int n) {
if(n<this.num) {
if(this.left == null) {
this.left = new Node(n);
}
else {
this.left.insert(n);
}
} else {
if(this.right == null) {
this.right = new Node(n);
} else {
this.right.insert(n);
}
}
}
}
static void postOrder(Node node) {
if(node == null) return;
postOrder(node.left);
postOrder(node.right);
System.out.println(node.num);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Node root = new Node(Integer.parseInt(br.readLine()));
String input;
while(true) {
input = br.readLine();
if(input == null || input.equals("")) break;
root.insert(Integer.parseInt(input));
}
postOrder(root);
}
}
Tree
를 구성하고 구성된 트리를 postorder(후위 순회)
해주면 된다.트리의 순회
전위 순회(PreOrder) -> root - left - right
중위 순회(InOrder) -> left - root - right
후위 순회(PostOrder) -> left - right - root