这个题和由中序和后序构建二叉树基本一样,看看就行了。。。。LeetCode 之 Construct Binary Tree from Inorder and Postorder Traversal
代码(136ms):
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
return recover(inorder,0, inorder.size()-1, preorder ,0, preorder.size()-1);
}
TreeNode* recover(vector<int> &inorder, int inStart, int inEnd, vector<int> &preorder ,int preStart, int preEnd){
if(inStart > inEnd) return NULL;
int root = preorder[preStart];
int pos = 0;//root前有pos个前序的
for(int i= 0;i<=inEnd-inStart;i++){
if(inorder[inStart+i] == root){
pos = i;
break;
}
}
TreeNode * node = new TreeNode(root);
node->left = recover(inorder , inStart , inStart+pos-1 , preorder, preStart+1 , preStart+pos);
node->right = recover(inorder , inStart+pos+1 , inEnd , preorder, preStart+pos+1 , preEnd);
return node;
}
};