/**
* 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:
void bt(TreeNode* & root,vector<int>& preorder,int p1,int p2,vector<int>& inorder,int i1,int i2,unordered_map<int,int>& map)
{
if(p1==p2) return ;
int val=preorder[p1];
root =new TreeNode(val);
int i=map[val];
bt(root->left,preorder,p1+1,i-i1+p1+1,inorder,i1,i,map);
bt(root->right,preorder,i-i1+p1+1,p2,inorder,i+1,i2,map);
return ;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode* root(NULL);
int n=preorder.size();
unordered_map<int,int>map;
for(int i=0;i<n;++i)
{
map[inorder[i]]=i;
}
bt(root,preorder,0,n,inorder,0,n,map);
return root;
}
};
leetcode - 105. Construct Binary Tree from Preorder and Inorder Traversal
最新推荐文章于 2021-06-14 21:00:09 发布