二叉树的前序遍历第一个是根节点,中序遍历中,根节点左右分别为左右子树节点。
1.获取根节点,建立根节点
2.查找根节点在中序中的下标
3.划分左子树右子树的前序和中序遍历区间,递归的构建当前根节点的左右子树。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
TreeNode root = reConstruct(pre,0,pre.length-1,in,0,pre.length-1);
return root;
}
public TreeNode reConstruct(int[] pre,int l1,int r1,int[] in,int l2,int r2){
if(l1>r1)
return null;
TreeNode root = new TreeNode(pre[l1]);
int rootIndex = l2;
while(rootIndex<=r2 && in[rootIndex]!=root.val)
rootIndex++;
root.left = reConstruct(pre,l1+1,l1+rootIndex-l2,in,l2,rootIndex-1);
root.right = reConstruct(pre,l1+rootIndex-l2+1,r1,in,rootIndex+1,r2);
return root;
}
}