1008. Construct Binary Search Tree from Preorder Traversal

/**
 * 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* func(vector<int>& preorder, int start, int end) {
        if (start>end){ return NULL;}
        
        TreeNode *root = new TreeNode(preorder[start]);
        int mid = -1;
        for(int i=start+1;i<=end;i++){
            if (preorder[start]<preorder[i]){
                mid = i;
                break;
            }
        }
        if (mid == -1){// not find mid, then all is left parts
            root->left = func(preorder, start+1, end);
            return root;
        }
        else{
            root->left = func(preorder, start+1, mid-1);
            root->right = func(preorder, mid, end);
            return root;
        }
    }
    
    TreeNode* bstFromPreorder(vector<int>& preorder) {
        return func(preorder, 0, preorder.size()-1);
    }
};
发布了425 篇原创文章 · 获赞 18 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/zeroQiaoba/article/details/104692597