/** * 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: TreeNode* build(vector<int>& preorder, vector<int>& inorder,int l1,int r1,int l2,int r2){ if(l1>r1) return NULL; // if(l2>r2) return NULL; 可以注释掉的 TreeNode* root; root = new TreeNode(preorder[l1]); int l=l2; while(inorder[l]!=preorder[l1]){ l++; } l=l-l2; //int l=in_map[preorder[l1]]-l2; 可以使用map,提高查找速度 root->left = build(preorder,inorder,l1+1,l1+l,l2,l2+l-1); root->right = build(preorder,inorder,l1+l+1,r1,l2+l+1,r2); return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { TreeNode* root; int s=preorder.size(); if(s==0) return root; root = build(preorder,inorder,0,s-1,0,s-1); return root; } };
Construct Binary Tree from Preorder and Inorder Traversal