leetcode 95. 不同的二叉搜索树 II

本文探讨了在解决95号LeetCode问题——唯一二叉搜索树的实现过程中,关于代码优化和逻辑理解的思考。作者指出,初始将`vector<TreeNode*> v;`定义在递归函数外部会导致错误的结果,因为每个递归层级都需要自己的`v`来存储当前层级的树节点。通过调整代码,确保每次递归调用都创建新的`v`,从而正确生成所有可能的二叉搜索树。文章强调了递归理解和调试技巧在解决问题中的重要性。
摘要由CSDN通过智能技术生成

做完这道题的一些感想

代码如下:

class Solution {
private:
    vector<TreeNode*> generateTrees(int first, int last) {
        if (first > last) return { NULL };
        vector<TreeNode*> v;
        for (int i = first; i <= last; ++i) {
            auto lefts = generateTrees(first, i - 1);
            auto rights = generateTrees(i + 1, last);
            for (auto left : lefts) {
                for (auto right : rights) {     
                    TreeNode* kk = new TreeNode(i);              
                    kk->left = left;
                    kk->right = right;
                    v.push_back(kk);
                }
            }
        }
        return v;
    }
public:
    vector<TreeNode*> generateTrees(int n) {
        if (n <= 0) return {};       
        return generateTrees(1, n);
    }
};
    所写代码参考了官方题解。
	起初对于vector<TreeNode*> v;这条语句的定义位置有些困惑,想了十几分钟终于想通了,记录一下思路以后复习用。
	起初我把这个定义放在了递归函数的外面,这是错误的,调用generateTrees()函数是为了生成一个新的更短子序列的二叉搜索树,比如题目要生成1-5的序列,我这样调用,会把{5}、{4,5}这种也加入到答案v中,而答案显然每个集合都要包含1-5这几个数字和若干个NULL。
	所以,每次调用generateTrees()函数都要创建一个v.而我们最终返回的是对应于1-5序列的v。
	参考网站[参考](https://github.com/azl397985856/leetcode/blob/master/problems/95.unique-binary-search-trees-ii.md)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值