堆和栈的生命周期对于代码的影响

之前从来没有使用过new,delete都是默认调用栈直接声明类型,现在遇到一道棘手的题目了,开始手忙脚乱了
https://leetcode.cn/problems/unique-binary-search-trees-ii/description/?envType=study-plan-v2&envId=dynamic-programming
这道题目,返回的是每一颗树的根节点,大致思路都了解,就是卡特兰数那个构造方法,遍历以每一个i作为该区间的根节点,就可以将剩下的两边分成俩颗子树了
主要就是生命周期的影响,如果你是局部代码块中创建的空间,代码块结束后栈就释放了

使用堆空间,堆空间可以手动控制生命周期,什么时候创建,什么时候释放

代码


class Solution {
public:
    vector generateTrees(int n) {
        if (n == 0) return {};
        return dfs(1, n);
    }
    vector dfs(int l, int r) {
        vector res;
        if (l > r) {
            res.push_back(nullptr);
            return res;
        }
        for (int i = l; i <= r; ++i) {
            auto left = dfs(l, i - 1);
            auto right = dfs(i + 1, r);
            for (auto lnode : left) {
                for (auto rnode : right) {
                    TreeNode* root = new TreeNode(i);
                    root->left = lnode;
                    root->right = rnode;
                    res.push_back(root);
                }
            }
        }
        return res;
    }
};
posted @ 2025-10-30 19:26  hky2023  阅读(7)  评论(0)    收藏  举报