import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型一维数组 先序遍历
     * @param zhongxu int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] xianxu, int[] zhongxu) {
        // write code here
        int[] ret=new int[1];
        if(xianxu.length==0){
            return new int[0];
        }
        TreeNode root=buildTree(xianxu,zhongxu);
        Queue<TreeNode> qu=new LinkedList<>();
        List<ArrayList<Integer>> list=new ArrayList<>();
        qu.offer(root);
        while(!qu.isEmpty()){
            ArrayList<Integer> list1=new ArrayList<>();
            int size=qu.size();
            for(int i=0;i<size;i++){
                TreeNode top=qu.poll();
                if(top.left!=null){
                    qu.offer(top.left);
                }
                if(top.right!=null){
                    qu.offer(top.right);
                }
                list1.add(top.val);
            }
            list.add(list1);
        }
        for(int i=0;i<list.size();i++){
            int j=0;
            for(;j!=list.get(i).size()-1;j++){
                ;
            }
            if(i==ret.length){
                ret=Arrays.copyOf(ret,ret.length+1);
            }
            ret[i]=list.get(i).get(j);
            
        }
        return ret;
    }
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return createTree(preorder, inorder, 0, preorder.length-1);
    }
    public int preIndex;
    public TreeNode createTree(int[] preorder, int[] inorder, int inbegin, int inend) {
        if (inbegin > inend) return null;
        TreeNode root = new TreeNode(preorder[preIndex]);
        int index = findIndex(inorder, inbegin, inend, preorder[preIndex]);
        preIndex++;

        root.left = createTree(preorder, inorder, inbegin, index - 1);

        root.right = createTree(preorder, inorder, index + 1, inend);
        return root;
    }

    public int findIndex(int[] inorder, int inbegin, int inend, int val) {
        int i = 0;
        for (i = inbegin; i <= inend; i++) {
            if (inorder[i] == val) {
                return i;
            }
        }
        return -1;

    }
}