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;
}
}