题目所属分类
和上一题类似
原题链接
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
代码案例:
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]
示例 2:
题解
时间复杂度 O(n)
y就是这边的k
class Solution {
Map<Integer,Integer> map = new HashMap<>();
public TreeNode buildTree(int[] inorder, int[] postorder) {
int n = inorder.length;
for(int i = 0 ; i < n ; i++){
map.put(inorder[i],i);
}
return build(inorder,postorder,0,n-1,0,n-1);
}
public TreeNode build(int[] inorder , int[] postorder , int pl , int pr , int il , int ir){
if(pl > pr ) return null ;
TreeNode root = new TreeNode(postorder[pr]);
int k = map.get(postorder[pr]) ;
root.left=build(inorder,postorder,pl,pl+k-1-il,il,k-1);
root.right=build(inorder,postorder,pl+k-il,pr-1,k+1,ir);
return root;
}
}