/*** 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 {map<int,int> mp;TreeNode* dfs(vector<int>& preorder, int pl, int pr, vector<int>& inorder, int il, int ir){if(pr < pl) return nullptr;TreeNode* root = new TreeNode(preorder[pl]);int leftlen = mp[preorder[pl]] - il;//int rightlen = ir - mp[preorder[pl]];root->left = dfs(preorder, pl + 1, pl + leftlen, inorder, il, mp[preorder[pl]] - 1);root->right = dfs(preorder, pl + leftlen + 1, pr, inorder, mp[preorder[pl]] + 1, ir);return root;}public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {for(int i = 0; i < inorder.size(); i++)mp[inorder[i]] = i;return dfs(preorder,0, preorder.size() - 1,inorder, 0, inorder.size() - 1);}};
第二次写题
/*** 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 {map<int, int> mp; //val posTreeNode* dfs(vector<int>& preorder, int ps, int pe, vector<int>& inorder, int is, int ie){if(ps > pe) return nullptr;TreeNode* root = new TreeNode(preorder[ps]);// cout << preorder[ps] << endl;;int mid = mp[preorder[ps]];int leftlen = mid - is;int rightlen = ie - mid;root->left = dfs(preorder, ps + 1, ps + 1 + leftlen - 1, inorder, is, mid - 1);root->right = dfs(preorder, ps + leftlen + 1, pe, inorder, mid + 1, ie);return root;}public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {for(int i = 0; i < inorder.size(); i++)mp[inorder[i]] = i;return dfs(preorder, 0, preorder.size() - 1, inorder, 0, inorder.size() - 1);}};
