返回与给定先序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。
示例:
输入:[8,5,1,7,10,12],已知二叉搜索树的先序(根左右)
输出:[8,5,10,1,7,null,12],建立二叉搜索树,返回其root
class Solution {
public:
TreeNode* bstFromPreorder(vector<int>& preorder) {
return form(preorder,0,preorder.size()-1);
}
TreeNode* form(vector<int>& preorder, int start, int end)
{
if(start > end)
return NULL;
TreeNode* newroot = new TreeNode(preorder[start]);
int i;
for(i = start+1; i <= end; ++i)
{
if(preorder[i] > preorder[start])
break;//右子树的开始 i
}
newroot->left = form(preorder,start+1,i-1);
newroot->right = form(preorder,i,end);
return newroot;
}
};