题目链接: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);} };