반응형
https://www.acmicpc.net/problem/2263
import java.util.Scanner;
class Tree {
class Node{
int data;
Node left, right;
Node(int data){
this.data = data;
}
}
Node root;
static int pIndex = 0;
public void buildTreeByInPost(int in[], int post[]){
pIndex = post.length - 1;
root = buildTreeByInPost(in ,post, 0, in.length-1);
}
private Node buildTreeByInPost(int in[], int post[], int start, int end){
if(start > end) return null;
Node node = new Node(post[pIndex--]);
if(start==end) return node;
int mid = search(in, start, end, node.data);
node.right = buildTreeByInPost(in, post, mid+1, end);
node.left = buildTreeByInPost(in, post, start, mid-1);
return node;
}
private int search(int arr[], int start, int end, int value){
int i;
for(i=start; i<=end; i++){
if(arr[i]==value) return i;
}
return i;
}
void printPreorder(Node node){
if(node == null) return;
System.out.print(node.data + " ");
printPreorder(node.left);
printPreorder(node.right);
}
}
public class Main {
public static void main(String args[]){
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int[] in = new int[n];
int[] post = new int[n];
for(int i=0; i<n;i++){
in[i] = sc.nextInt();
}
for(int i=0; i<n;i++){
post[i] = sc.nextInt();
}
Tree tree = new Tree();
tree.buildTreeByInPost(in, post);
tree.printPreorder(tree.root);
}
}
반응형
'Algorithm > problem' 카테고리의 다른 글
[백준] 1914번 : 하노이 탑 - 재귀, 큰 수 (0) | 2022.09.18 |
---|---|
백준 1004번 : 어린왕자 - C++ (0) | 2022.09.10 |
백준 9657번 : 돌 게임 3 - C++ (0) | 2022.09.04 |
백준 4883: 삼각 그래프 - dp (0) | 2022.09.02 |
백준 15486번 : 퇴사 2 - DP (0) | 2022.09.02 |