重建二叉树
import java.util.Scanner;
public class Main {
public static boolean flag;
public static void main(String[] args) {
Main build=new Main();
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
flag=true;
int N=scanner.nextInt();
int[] preOrder=new int[8];
int[] inOrder=new int[8];
for (int i = 0; i < N; i++) {
preOrder[i]=scanner.nextInt();
}
for (int i = 0; i < N; i++) {
inOrder[i]=scanner.nextInt();
}
Node root=build.buildTreePreOrderInOrder(preOrder,0,preOrder.length-1,inOrder,0,preOrder.length-1);
if(flag){
build.backOrder(root);
System.out.println();
}else {
System.out.println("No");
}
}
scanner.close();
}
public Node buildTreePreOrderInOrder(int[] preOrder,int begin1,int end1,int[] inOrder,int begin2,int end2){
if(begin1>end1||begin2>end2){
return null;
}
int rootData=preOrder[begin1];
Node head=new Node(rootData);
int divider=findIndexInArray(inOrder,rootData,begin2,end2);
if(divider==-1){
flag=false;
return null;
}
int offSet=divider-begin2-1;
Node left=buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);
Node right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);
head.left=left;
head.right=right;
return head;
}
public int findIndexInArray(int[] a,int x,int begin,int end){
for(int i=begin;i<=end;i++){
if(a[i]==x) return i;
}
return -1;
}
public void backOrder(Node n){
if(n!=null){
backOrder(n.left);
backOrder(n.right);
System.out.print(n.val+" ");
}
}
class Node{
Node left;
Node right;
int val;
public Node(int val){
this.val=val;
}
public Node getLeft(){
return left;
}
public Node getRight(){
return right;
}
public int getVal(){
return val;
}
}
}