思路:
哈希+深度优先遍历
代码:
class Solution {
int[] preorder;
Map<Integer,Integer> map=new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.preorder=preorder;
for(int i=0;i<inorder.length;i++){
map.put(inorder[i],i);
}
return dfs(0,0,preorder.length-1);
}
private TreeNode dfs(int root,int left,int right){
if(left>right){
return null;
}
TreeNode node=new TreeNode(preorder[root]);
int i=map.get(preorder[root]);
node.left=dfs(root+1,left,i-1);
node.right=dfs(root+(i-left)+1,i+1,right);
return node;
}
}
分解:
可参考剑指offer的第七题
复杂度分析:
时间复杂度:O(N)
空间复杂度:O(N)最差情况下退化为链表