leet-code-105. 從前序與中序遍歷序列構造二叉樹:
class Solution {
private:
int search(int *inorder,int len,int target){
for(size_t i=0;i<len;++i){
if(target==inorder[i])
return i;
}
return -1;
}
TreeNode* build(int* pre,int *in,int len){
if(len<=0)
return NULL;
TreeNode* root=new TreeNode(pre[0]);
int len1=search(in,len,pre[0]);
root->left=build(pre+1,in,len1);
root->right=build(pre+len1+1,in+len1+1,len-len1-1);
return root;
}
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int *PreOrder=new int [preorder.size()];
int *InOrder=new int[inorder.size()];
for(size_t i=0;i<inorder.size();++i){
InOrder[i]=inorder[i];
PreOrder[i]=preorder[i];
}
TreeNode* root=build(PreOrder,InOrder,inorder.size());
delete []InOrder;
delete []PreOrder;
return root;
}
};
思路同上:
class Solution {
private:
int search(int *inorder,int len,int target){
for(size_t i=0;i<len;++i){
if(target==inorder[i])
return i;
}
return -1;
}
private:
TreeNode* build(int *post,int *in,int len){
if(len<=0)
return NULL;
TreeNode* root=new TreeNode(post[len-1]);
int len1=search(in,len,post[len-1]);
root->left=build(post,in,len1);
root->right=build(post+len1,in+len1+1,len-len1-1);
return root;
}
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
int *InOrder=new int [inorder.size()];
int *PostOrder=new int[postorder.size()];
for(size_t i=0;i<inorder.size();++i){
InOrder[i]=inorder[i];
PostOrder[i]=postorder[i];
}
TreeNode* root=build(PostOrder,InOrder,inorder.size());
delete []InOrder;
delete []PostOrder;
return root;
}
};