先序遍历&中序遍历
递归做法:
递归做法比较容易理解,先在先序遍历中确定第一个点,这个点一定是根节点,然后在中序遍历中找到这个点的位置,那么这个位置之前的都是左子树,后边的都是右子树,然后分别递归。
class Solution {
public:
int start = 0;
TreeNode* build(vector<int>& pre,vector<int>& in, int ps,int pe, int is, int ie){
if (ps>=pe)
return NULL;
int val = pre[ps];
TreeNode* root = new TreeNode(val);
int pos;
for (int i=is;i<ie;i++){
if (in[i]==val) {
pos=i;
break;
}
}
root->left = build(pre,in,ps+1,ps+pos-is+1,is,pos);
root->right= build(pre,in,pe-ie+pos+1,pe,pos+1,ie);
return root;
}
TreeNode* buildTree(vector<