从前序和中序遍历序列构造二叉树
题目
思路
这道题思路和之前做过的中序+后序遍历构造二叉树(点击即可跳转)基本类似,唯一不同的是,前序遍历所得数据的第一个是根节点,其他都相似,这里就不再赘述了。
代码
// Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
int pre[];
HashMap<Integer,Integer> map=new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
pre=preorder;
for(int i=0;i<inorder.length;i++){
map.put(inorder[i],i);
}
return build(0,inorder.length-1,0,preorder.length-1);
}
public TreeNode build(int inorderstart,int inorderend,int preorderstart,int preorderend){
if(inorderend<inorderstart||preorderend<preorderstart) return null;
int rootval=pre[preorderstart];
int rootnumber=map.get(rootval);
TreeNode node=new TreeNode(rootval);
node.left=build(inorderstart,rootnumber-1,preorderstart+1,preorderstart+rootnumber-inorderstart);
node.right=build(rootnumber+1,inorderend,preorderstart+rootnumber-inorderstart+1,preorderend);
return node;
}
}