这个题和上一个题差不多是一样的,只不过后序变成了前序,但是思路还是一样的,这次直接顺着上次的思路写的,一遍A了,算是记住这种算法了。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return getTree(preorder, 0, preorder.size() -1 , inorder, 0, inorder.size() - 1);
}
TreeNode* getTree(vector<int>& preorder, int begin1, int end1, vector<int>& inorder, int begin2, int end2)
{
if(begin1 > end1) return NULL;
TreeNode *head = new TreeNode(preorder[begin1]);
if(begin1 == end1) return head;
int i;
for(i = begin2;i<=end2;i++)
{
if(inorder[i] == preorder[begin1])
break;
}
int left_length = i - begin2;
head->left = getTree(preorder, begin1 + 1, begin1 + left_length, inorder, begin2, begin2 + left_length - 1);
head->right = getTree(preorder, begin1 + left_length + 1, end1, inorder, begin2 + left_length + 1, end2);
}
};