从前序与中序遍历序列构造二叉树
思路
- 寻找根结点
- 用根结点的值划分中序遍历,获得左右子树大小
- 遍历建立左右子树
代码
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
}
public TreeNode build(int[] preorder,int prestart, int preend,int[] inorder,int instart,int inend){
if(prestart > preend) {
return null;
}
int rootVal = preorder[prestart];
int index = 0;
for(int i= instart;i<=inend;i++){
if(inorder[i] == rootVal){
index = i;
break;
}
}
TreeNode root = new TreeNode(rootVal);
int leftSize = index - instart;
root.left = build(preorder,prestart+1,prestart+leftSize,inorder,instart,index-1);
root.right = build(preorder,prestart+leftSize+1,preend,inorder,index+1,inend);
return root;
}
}