105 从前序与中序遍历序列构造二叉树
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/afc8e64e72ff4713ab28c5122443b5aa.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/78b4058e10ac4a479b8749c17ebba4ec.png)
import java.util.HashMap;
import java.util.Map;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
public class Letcode105 {
public TreeNode bulidTree(int[] preOrder, int[] inOrder) {
int preLength = preOrder.length;
int inLength = inOrder.length;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < inLength; i++) {
map.put(inOrder[i], i);
}
return bulidTree(preOrder, 0, preLength - 1,
map, 0, inLength - 1);
}
private TreeNode bulidTree(int[] preOrder, int preLeft, int preRight, Map<Integer, Integer> map, int inLeft, int inRight) {
if (preLeft > preRight || inLeft > inRight) {
return null;
}
int root = preOrder[preLeft];
TreeNode treeNode = new TreeNode(root);
int pIndex = map.get(root);
treeNode.left = bulidTree(preOrder, preLeft + 1, pIndex - inLeft + preLeft, map,
inLeft, pIndex - 1);
treeNode.right = bulidTree(preOrder,pIndex - inLeft + preLeft + 1, preRight,
map,pIndex + 1,inRight);
return treeNode;
}
}