Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Mateusz Marchewka - 2
- import java.util.Scanner;
- public class Source
- {
- static int g=0;
- static int[] w;
- public static Scanner inScan = new Scanner(System.in);
- public static void post(int[] a, int[] k, int la, int pa, int lk, int pk)
- {
- if(pa == la)
- {
- w[g] = a[la];
- g++;
- return;
- }
- if(pa-la == 1)
- {
- if(a[la] == k[lk])
- {
- w[g]= k[pk];
- g++;
- w[g] = k[lk];
- g++;
- } else
- {
- w[g]= k[lk];
- g++;
- w[g] = k[pk];
- g++;
- }
- return;
- }
- if(la > pa) return;
- int p = 0;
- for(int i=lk;i<=pk;i++)
- if(a[pa] != k[i]) p++;
- else break;
- w[g] = a[pa];
- g++;
- post(a,k,la,la+p-1,lk,lk+p-1);
- post(a,k,la+p,pa-1,lk+p+1,pk);
- }
- public static void pre(int[] a, int[] k, int la, int pa, int lk, int pk)
- {
- if(pa == la)
- {
- w[g] = a[la];
- g++;
- return;
- }
- if(pa-la == 1)
- {
- if(a[la] == k[lk])
- {
- w[g]= k[pk];
- g++;
- w[g] = k[lk];
- g++;
- } else
- {
- w[g]= k[lk];
- g++;
- w[g] = k[pk];
- g++;
- }
- return;
- }
- if(la > pa) return;
- int p = 0;
- for(int i=lk;i<=pk;i++)
- if(a[la] != k[i]) p++;
- else break;
- pre(a,k,la+1,la+p,lk,lk+p-1);
- pre(a,k,la+p+1,pa,lk+p+1,pk);
- w[g] = a[la];
- g++;
- }
- public static void main( String [] args )
- {
- int z = inScan.nextInt();
- for(int i=0;i<z;i++)
- {
- int n = inScan.nextInt();
- String nazwa = inScan.next();
- int[] a = new int[n];
- for(int j=0;j<n;j++)
- a[j] = inScan.nextInt();
- String m = inScan.next();
- int[] k = new int[n];
- w = new int[n];
- for(int j=0;j<n;j++)
- {
- k[j] = inScan.nextInt();
- w[j] = 0;
- }
- g=0;
- if(nazwa.equals("PREORDER")) pre(a,k,0,n-1,0,n-1);
- else post(a,k,0,n-1,0,n-1);
- for(int j=0;j<n;j++)
- System.out.print(w[j] + " ");
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement