码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode95 不同的二叉搜索树II

时间:2020-02-11 00:19:24      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:tor   角度   new   ++   return   roo   生成   ref   solution   

题目https://leetcode-cn.com/problems/unique-binary-search-trees-ii/

给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。

思路:还是要从递归的角度去思考,策略是,从1-n中选择i作为根节点,那么1-i-1作为它的左子树,i+1-n作为它的右子树,1-i-1生成的BST的个数乘以i+1-n生成的BST的个数就是以i为根节点得到的BST的个数。

这里的递归调用如图:
技术图片

代码

class Solution {
public:
    vector<TreeNode*> dfs(int l, int r){
        vector<TreeNode*> res;
        if(l > r){
            res.push_back(nullptr);
            return res;
        }
        for(int i = l; i <= r; ++i){
            vector<TreeNode*> left = dfs(l, i-1);
            vector<TreeNode*> right = dfs(i+1, r);
            for(auto &l:left){
                for(auto &r:right){
                    TreeNode* root = new TreeNode(i);
                    root->left = l;
                    root->right = r;
                    res.push_back(root);
                }
            }
        }
        return res;
    }
    vector<TreeNode*> generateTrees(int n) {
        if(n == 0) return vector<TreeNode*>();
        else return dfs(1, n);
    }
};

leetcode95 不同的二叉搜索树II

标签:tor   角度   new   ++   return   roo   生成   ref   solution   

原文地址:https://www.cnblogs.com/patrolli/p/12293368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!