import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param preOrder int整型一维数组
* @param vinOrder int整型一维数组
* @return TreeNode类
*/
public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) {
// write code here
if (preOrder.length == 0 && vinOrder.length == 0 ) return null;
List<Integer> preList = new ArrayList<>();
List<Integer> vinList = new ArrayList<>();
int preLength = preOrder.length;
for (int i = 0; i < preLength; i++) {
preList.add(preOrder[i]);
}
int vinLength = vinOrder.length;
for (int i = 0; i < vinLength; i++) {
vinList.add(vinOrder[i]);
}
TreeNode target = buildTree(preList, vinList, null);
return target;
}
TreeNode buildTree(List<Integer> preList, List<Integer> vinList,
TreeNode root) {
if (preList == null || preList.size() == 0) return null;
int rootVal = preList.get(0);
root = new TreeNode(rootVal);
int rootIndex = vinList.indexOf(rootVal);
List<Integer> preListLeft = null;
List<Integer> vinListLeft = null;
List<Integer> preListRight = null;
List<Integer> vinListRight = null;
if (rootIndex > 0) {
vinListLeft = vinList.subList(0, rootIndex);
preListLeft = preList.subList(1, rootIndex + 1);
}
if (rootIndex < vinList.size() - 1) {
vinListRight = vinList.subList(rootIndex + 1, vinList.size());
preListRight = preList.subList(preList.size() - vinListRight.size(),
preList.size());
}
TreeNode left = buildTree(preListLeft, vinListLeft, root.left);
if (left != null) root.left = left;
TreeNode right = buildTree(preListRight, vinListRight, root.right);
if (right != null) root.right = right;
return root;
}
}