Return the root node of a binary search tree that matches the given preorder traversal.
Below solution is O(n) time complex,amazing idea.
int i=0;
TreeNode* bstFromPreorder(vector<int>& preorder) {
return dfs(0,100,preorder);
}
TreeNode* dfs(int lo,int hi,vector<int>& preorder){
if((preorder.size()==i)||preorder[i]<lo||preorder[i]>hi)//注意判断的顺序
return nullptr;
TreeNode* root = new TreeNode(preorder[i++]);
root->left = dfs(lo,root->val,preorder);
root->right = dfs(root->val,hi,preorder);
return root;
}