华为OJ 重建二叉树

来源:互联网 发布:淘宝账号名字大全2015 编辑:程序博客网 时间:2024/05/17 04:40

本以为用之前那个二叉树遍历的代码就行,但是在过程中总是出现一些细节性问题,所以就从新写了一个用INT存储的。

import java.util.*;public class Main{static int[] stack=new int[1000];static int t=0;static int flag=0;   public static void main(String[] args) {   Scanner sc=new Scanner(System.in);while(sc.hasNext()){t=0;flag=0;int n=sc.nextInt();int[] s1=new int[n];int[] s2=new int[n];for(int i=0;i<n;i++)s1[i]=sc.nextInt();for(int i=0;i<n;i++)s2[i]=sc.nextInt();post(s1,s2);if(flag==1)System.out.println("No");else{for(int i=t-1;i>=0;i--)System.out.print(stack[i]+" ");System.out.println();}}   }   //s1,先序,s2中序   public static void post(int[] s1,int[] s2){   try{if(s1.length==0)return;int i=0;for(;i<s2.length;){if(s2[i]==s1[0]){break;}i++;}stack[t++]=s2[i];//前序遍历int[] pre=new int[i];int[] prer=new int[s2.length-i-1];for(int j=0;j<i;j++)pre[j]=s1[1+j];for(int j=0;j<s2.length-i-1;j++)prer[j]=s1[i+1+j];int[] midl=new int[i];int[] midr=new int[s2.length-i-1];for(int j=0;j<i;j++)midl[j]=s2[j];for(int j=0;j<s2.length-i-1;j++)midr[j]=s2[i+j+1];post(prer,midr);post(pre,midl);   }   catch(Exception e){   flag=1;   }   }}


0 0
原创粉丝点击