[LeetCode] Unique Binary Search Trees II

本文介绍了一种使用递归深度优先搜索的方法来生成所有可能的唯一二叉搜索树,并提供了详细的C++实现代码。对于给定的整数n,该算法能够找出所有结构上独一无二的二叉搜索树,这些树能存储从1到n的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given 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

 

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

 

Hide Tags
  Tree Dynamic Programming
Have you met this question in a real interview? 
Yes
 
No
 

Discuss

 

思路:Unique Binary Search Trees是用dp,求解所有的trees不能用dp。

对于每一个root,有leftNum * rightNum种情况,直接穷举,对于start>end, 返回含有NULL的一个节点,start==end也返回一个节点,框架和深搜一样

class Solution {
    public:
        vector<TreeNode *> dfs(int start, int end)
        {
            vector<TreeNode*> trees;

            if(start > end)
            {
                trees.push_back(NULL);
                return trees;
            }
            if(start == end)
            {
                TreeNode* p = new TreeNode(start);
                trees.push_back(p);
                return trees;
            }

            for(int rootVal = start; rootVal <= end; rootVal ++)
            {
                vector<TreeNode*> leftSubTrees = dfs(start, rootVal - 1);
                vector<TreeNode*> rightSubTrees = dfs(rootVal + 1, end);

                int leftSubTreesNum = leftSubTrees.size();
                int rightSubTreesNum = rightSubTrees.size();
                for(int i = 0; i < leftSubTreesNum; i++)
                {
                    for(int j= 0; j< rightSubTreesNum; j++)
                    {
                        TreeNode* root = new TreeNode(rootVal);
                        TreeNode* left = leftSubTrees[i];
                        TreeNode* right= rightSubTrees[j];
                        root->left = left;
                        root->right= right;
                        trees.push_back(root);
                    }
                }
            }
            return trees;
        }
        vector<TreeNode *> generateTrees(int n) {
            if(n == 0)
            {
                vector<TreeNode *>   trees;
                trees.push_back(NULL);
                return trees;
            }
            return dfs(1, n);
        }
};

 

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值