/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(inorder.size()==0||inorder.size()!=postorder.size())
return NULL;
map<int,int> mapper;
for(int i=0;i<inorder.size();++i)
mapper[inorder[i]]=i;
return helper(inorder,postorder,mapper,inorder.size()-1,inorder.size()-1,0);
}
TreeNode* helper(vector<int>& inorder,vector<int>& postorder,map<int,int>& mapper,int root,int start,int end){
//base case
if(start<end)
return NULL;
int r=postorder[root];
int index=mapper[r];
TreeNode* node=new TreeNode(r);
node->right=helper(inorder,postorder,mapper,root-1,start,index+1);
node->left=helper(inorder,postorder,mapper,root-start+index-1,index-1,end);
return node;
}
};
LeetCode: Construct Binary Tree from Inorder and Postorder Traversal

最新推荐文章于 2022-01-01 11:35:53 发布
