力扣连接:. - 力扣(LeetCode)
代码随想录类似题讲解:坑很多!来看看你掉过几次坑 | LeetCode:106.从中序与后序遍历序列构造二叉树_哔哩哔哩_bilibili
class Solution {
int[] preorder,inorder;
Map<Integer,Integer> mp = new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.preorder = preorder;
this.inorder = inorder;
int len = preorder.length;
for(int i=0;i<len;i++){
mp.put(inorder[i], i);
}
return build(0, len-1, 0, len-1);
}
//返回值是该子树的根结点
TreeNode build(int preSt, int preEnd, int inSt, int inEnd) {
if(preSt>preEnd || inSt>inEnd) return null;
//根结点在中序遍历的位置
int idx = mp.get(preorder[preSt]);
//分别构造左右子树,拼上去
TreeNode left = build(preSt+1, preSt+idx-inSt, inSt, idx-1);
TreeNode right = build(preSt+idx-inSt+1, preEnd, idx+1,inEnd);
return new TreeNode(preorder[preSt], left, right);
}
}