题目:
分析:
注意看清題,人家要的是重构一颗二叉树。
代碼:
/**
* 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* f(vector<int>& preorder, vector<int>& inorder,int x1,int y1,int x2,int y2)
{
if(x1>y1)
{
TreeNode* ans=NULL;
return ans;
}
if(x1==y1)
{
int c=preorder[x1];
TreeNode* ans=new TreeNode(c);
return ans;
}
int c;
for(c=x2;;c++)
{
if(inorder[c]==preorder[x1]) break;
}
TreeNode* ans=new TreeNode(preorder[x1]);
//cout<<x1+1<<y1+c-y2<<y1+c+1-y2<<y1<<endl;
//cout<<x2<<c-1<<c+1<<y2<<endl;
ans->left=f(preorder,inorder,x1+1,y1+c-y2,x2,c-1);
ans->right=f(preorder,inorder,y1+c+1-y2,y1,c+1,y2);
return ans;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
return f(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
}
};