95. 不同的二叉搜索树 II

题目链接:https://leetcode.cn/problems/unique-binary-search-trees-ii/description/?source=vscode

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解析:

其实是一道数据结构二叉搜索树入门题,放在这里提醒dfs不要陷入直接搜的困境,还可以分治

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:

    vector<TreeNode*> dfs(int l, int r) {

        if (l > r) return {nullptr};
        vector<TreeNode*> ret;
        for (int i = l; i <= r; i++) {
            vector<TreeNode*> left_trees = dfs(l, i - 1);
            vector<TreeNode*> right_trees = dfs(i + 1, r);

            for (int j = 0; j < left_trees.size(); j++) {
                for (int k = 0; k < right_trees.size(); k++) {
                    TreeNode* root = new TreeNode(i, left_trees[j], right_trees[k]);
                    ret.emplace_back(root);
                }
            }
            
        }
        return ret;
    }

    vector<TreeNode*> generateTrees(int n) {
        return dfs(1, n);
    }
};

 

posted @ 2025-09-15 21:22  WTSRUVF  阅读(3)  评论(0)    收藏  举报