construct-binary-tree-from-preorder-
/** * 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> &preorder, vector<int> &inorder) { if(preorder.size()!=inorder.size()) return NULL; return helper(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1); } TreeNode *helper(vector<int> &preorder,vector<int> &inorder,int preStart,int preEnd, int inStart,int inEnd) { if(preStart > preEnd || inStart > inEnd) { return NULL; } TreeNode *ROOT = new TreeNode(preorder[preStart]); int index = 0; for(int i = inStart; i <= inEnd; i++){ if(inorder[i] == preorder[preStart]) { index = i; break; } } ROOT->left = helper(preorder, inorder, preStart + 1, preStart + index - inStart, inStart, index - 1); ROOT->right = helper(preorder, inorder, preStart + index - inStart + 1, preEnd, index + 1, inEnd); return ROOT; } };