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