美文网首页
LeetCode Unique Binary Search Tr

LeetCode Unique Binary Search Tr

作者: codingcyx | 来源:发表于2018-04-13 09:59 被阅读0次

Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.

For example,
Given n = 3, your program should return all 5 unique BST's shown below.

1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3

class Solution {
public:
    vector<TreeNode*> generateTrees(int n) {
        vector<TreeNode*> res;
        if(n < 1) return res;
        return generate(1, n);
    }
    
    vector<TreeNode*> generate(int left, int right){
        vector<TreeNode*> ret;
        if(left > right) ret.push_back(NULL);
        if(left == right) ret.push_back(new TreeNode(left));
        if(left < right){
            vector<TreeNode*> left_sub, right_sub;
            for(int i = left; i<=right; i++){
                left_sub = generate(left, i-1);
                right_sub = generate(i+1, right);
                for(int j = 0; j<left_sub.size(); j++)
                    for(int k = 0; k<right_sub.size(); k++){
                        TreeNode* tmp = new TreeNode(i);
                        tmp -> left = left_sub[j];
                        tmp -> right = right_sub[k];
                        ret.push_back(tmp);
                    }
            }
        }
        return ret;
    }
};

相关文章

网友评论

      本文标题:LeetCode Unique Binary Search Tr

      本文链接:https://www.haomeiwen.com/subject/ynaqkftx.html