import java.util.*;


public class Solution {
    ArrayList<Integer> list = new ArrayList<>();
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求二叉树的右视图
     * @param preOrder int整型一维数组 先序遍历
     * @param inOrder int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] preOrder, int[] inOrder) {
        // write code here
        if(preOrder.length==0){
            return null;
        }
        TreeNode root = getTree(preOrder,inOrder);
        getRes(root,0);
        int[] res = new int[list.size()];
        for(int i = 0; i < list.size();i++){
            res[i] = list.get(i);
        }
        return res;
    }

    private void getRes(TreeNode root,int level) {
        // TODO
        if(root == null){
            return;
        }
        
        if(list.size()<level+1){
            list.add(root.val);
        }
    
        
        
        getRes(root.right,level+1);
        getRes(root.left,level+1);
    }

    private TreeNode getTree(int[] preOrder, int[] inOrder) {
        // TODO
        if(preOrder.length==0){
            return null;
        }
        TreeNode root = new TreeNode(preOrder[0]);
        int mid = 0;
        for(int i = 0; i < inOrder.length; i++,mid++){
            if(inOrder[i] == root.val){
                break;
            }
        }
        
        root.left = getTree(Arrays.copyOfRange(preOrder,1,1+mid),Arrays.copyOfRange(inOrder,0,mid));
        root.right = getTree(Arrays.copyOfRange(preOrder,mid+1,preOrder.length),Arrays.copyOfRange(inOrder,mid+1,inOrder.length));
        return root;
    }
}