主要知识点:根据前序+中序递归建树,层次遍历二叉树

import java.util.*;

public class Solution {

//根据前序+中序遍历重建二叉树
public TreeNode createByPreMid(int[] pre,int[] mid, int ipre,int imid,int n){
    if(n==0)
        return null;
    TreeNode node = new TreeNode(0);
    node.val = pre[ipre];
    int i=0;
    for(;i<n;++i){
        if(pre[ipre]==mid[imid+i])
            break;
    }
    node.left = createByPreMid(pre,mid,ipre+1,imid,i);
    node.right = createByPreMid(pre,mid,ipre+i+1,imid+i+1,n-i-1);
    return node;
}

//层次遍历
public ArrayList<Integer> levelOrder(TreeNode root){
    ArrayList<Integer> arr = new ArrayList<>();
    Deque<TreeNode> dq = new LinkedList<>();
    dq.offer(root);
    while(!dq.isEmpty()){
        int curSize=dq.size();
        while(curSize-->0){
            TreeNode node = dq.poll();
            if(curSize==0)
                arr.add(node.val);
            if(node.left!=null)  dq.offer(node.left);
            if(node.right!=null) dq.offer(node.right);
        }
    }
    return arr;
}


public int[] solve (int[] xianxu, int[] zhongxu) {
    // write code here
    TreeNode root = createByPreMid(xianxu,zhongxu,0,0,xianxu.length);
    ArrayList<Integer> arr = levelOrder(root);
    int[] res = new int[arr.size()];
    for(int i=0;i<arr.size();++i)
        res[i] = arr.get(i);
    return res;
}

}