import java.util.Arrays;
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
int rootNum = -1;
int leftTreeArrayLength = 0;
int rightTreeArrayLength = 0;
if (pre == null || in == null) {
return null;
}
// 在中序遍历中找到根的位置
for (int i = 0; i < in.length; i++) {
if (pre[0] == in[i]) {
rootNum = i;
}
}
if(rootNum==-1){
return null;
}
// 计算出左子树的数组大小
leftTreeArrayLength = rootNum;
// 计算出右子树的数组大小
rightTreeArrayLength = in.length - rootNum - 1;
// d定义数组
int in_left[] = new int[leftTreeArrayLength];
int in_right[] = new int[rightTreeArrayLength];
int per_left[] = new int[leftTreeArrayLength];
int per_right[] = new int[rightTreeArrayLength];
// 创建树的根
TreeNode root = new TreeNode(pre[0]);
// 将原树进行分解;
for (int i = 0; i < rootNum; i++) {
in_left[i] = in[i];
}
for (int i = 0; i < rightTreeArrayLength; i++) {
in_right[i] = in[i + rootNum + 1];
}
for (int i = 1; i < 1 + leftTreeArrayLength; i++) {
per_left[i - 1] = pre[i];
}
for (int i = leftTreeArrayLength + 1; i < pre.length; i++) {
per_right[i - leftTreeArrayLength - 1] = pre[i];
}
root.left=reConstructBinaryTree(per_left, in_left);
root.right=reConstructBinaryTree(per_right, in_right);
return root;}}



京公网安备 11010502036488号