Unique Binary Search Trees II

来源:互联网 发布:js引号嵌套 编辑:程序博客网 时间:2024/04/30 04:09

根据n的大小,把每一个BST生成出来,递归处理,把从[1,n]的每一个值作为根节点,然后递归生成其左子树和右子树

红线部分是错误原因

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
     vector<TreeNode *> generateBST(int beg, int end){
            vector<TreeNode *> rs;
            if(beg > end){
                rs.push_back(NULL);
                return rs;
            }
            for(int i = beg;i <= end;i++){

                ///TreeNode *root = new TreeNode(i);
                vector<TreeNode *>left = generateBST(beg, i-1);
                vector<TreeNode *>right  = generateBST(i+1,end);
                for(int j = 0;j < left.size();j++){
                    for(int k = 0;k < right.size();k++){
                           TreeNode *root = new TreeNode(i);
                           root->left = left[j];
                           root->right = right[k];
                           rs.push_back(root);
                    }
                }
            }
            return rs;
     }

     vector<TreeNode *> generateTrees(int n) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
             return generateBST(1,n);                        
     }
};