首页 » 编程之美 » 正文

[leetcode_95]Unique Binary Search Trees II

输入n,获得1-n生成的所有BTS

class Solution {
public:
    vector<TreeNode *> genTreeNodes(int left,int right) {
        vector<TreeNode *> nodes;
        nodes.clear();
        if(left > right) {
            nodes.push_back(NULL);
            return nodes;
        }
        if(left == right) {
            TreeNode * node = new TreeNode(left);
            nodes.push_back(node);
            return nodes;
        }
        for(int i = left;i<= right;i++) {
            vector<TreeNode *>lefts,rights;
            lefts.clear();
            rights.clear();
            lefts = genTreeNodes(left,i-1);
            rights = genTreeNodes(i+1,right);
            // 交替枚举left and right
            for(int l = 0;l < lefts.size();l++) {
                for(int r = 0; r < rights.size();r++) {
                    TreeNode *node = new TreeNode(i);
                    node->left = lefts[l];
                    node->right = rights[r];
                    nodes.push_back(node);
                }
            }
        }
        return nodes;
    }
    vector<TreeNode *> generateTrees(int n) {
        vector<TreeNode *>nodes;
        nodes.clear();
        nodes = genTreeNodes(1,n);
        return nodes;
    }
};

发表评论