105. 从前序与中序遍历序列构造二叉树

  1. class Solution {
  2. public:
  3. int preindex;
  4. unordered_map<int,int> map;
  5. TreeNode* traversal(int left,int right,vector<int>& inorder,vector<int>& preorder)
  6. {
  7. //无元素是返回
  8. if(left>right)return NULL;
  9. int rootValue = preorder[preindex];
  10. TreeNode* root = new TreeNode(rootValue);
  11. int midIndex = map[rootValue];
  12. preindex++;
  13. root->left = traversal(left,midIndex-1,inorder,preorder);
  14. root->right = traversal(midIndex+1,right,inorder,preorder);
  15. return root;
  16. }
  17. TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
  18. preindex = 0;
  19. //哈希表记录元素的索引
  20. for(int i=0;i<inorder.size();i++)
  21. map[inorder[i]] = i;
  22. return traversal(0,inorder.size()-1,inorder,preorder);
  23. }
  24. };