LeetCode-Unique Binary Search Trees II-唯一二叉搜索树-递归

https://oj.leetcode.com/problems/unique-binary-search-trees-ii/

跟二叉树个数计数的那道题类似,不同的是需要把所有的可能都返回,并整合成结果。

/**
 * 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 *> Solve(int s,int num){
        vector<TreeNode *> res;
        if(num==0) {
            res.push_back(NULL);
            return res;
        }
        for(int i=0;i<num;i++) {
            vector<TreeNode *> lv=Solve(s,i);
            vector<TreeNode *> rv=Solve(s+i+1,num-i-1);
            int ln=lv.size(),rn=rv.size();
            for(int j=0;j<ln;j++) for(int k=0;k<rn;k++){
                TreeNode *r=new TreeNode(s+i+1);
                r->left=lv[j];r->right=rv[k];
                res.push_back(r);
            }
        }
        return res;
    }
    vector<TreeNode *> generateTrees(int n) {
        return Solve(0,n);
    }
};

 

posted @ 2014-10-19 16:47  zombies  阅读(141)  评论(0编辑  收藏  举报