/*
前中序
*/
class Solution {
public:
TreeNode* dfs(vector<int>& preorder,int l1,int r1,vector<int>& inorder,int l2,int r2)
{
if(l1 > r1 || l2 > r2) return NULL;
int k=0;
while(inorder[l2+k] != preorder[l1]) k++;
TreeNode* root = new TreeNode(preorder[l1]);
cout<<k<<endl;
root->left=dfs(preorder,l1+1,l1+k,inorder,l2,l2+k-1);
root->right=dfs(preorder,l1+k+1,r1,inorder,l2+k+1,r2);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n=preorder.size();
int m=inorder.size();
if(!n||!m) return NULL;
TreeNode* root = dfs(preorder,0,n-1,inorder,0,m-1);
return root;
}
};
/*
中后序
*/
class Solution {
public:
TreeNode* dfs(vector<int>& inorder,int l1,int r1,vector<int>& postorder,int l2,int r2)
{
if(l1>r1 || l2>r2) return NULL;
int k=0;
while(inorder[l1+k] != postorder[r2]) k++;
TreeNode* root=new TreeNode(postorder[r2]);
root->right=dfs(inorder,l1+k+1,r1,postorder,l2+k,r2-1);
root->left=dfs(inorder,l1,l1+k-1,postorder,l2,l2+k-1);
return root;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
int n=inorder.size();
int m=postorder.size();
if(!n || !m) return NULL;
TreeNode* root = dfs(inorder,0,n-1,postorder,0,m-1);
return root;
}
};