Algorithm/problem
백준 2263번 : 트리의 순회 - Java
DingCoDing
2022. 9. 8. 01:06
반응형
https://www.acmicpc.net/problem/2263
2263번: 트리의 순회
첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다.
www.acmicpc.net
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);
}
}
반응형