给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
示例 2:
提示:
C++
class Solution { public: int numTrees(int n) { vector<int> G(n + 1, 0); G[0] = 1; G[1] = 1;
for (int i = 2; i <= n; ++i) { for (int j = 1; j <= i; ++j) { G[i] += G[j - 1] * G[i - j]; } } return G[n]; } };
|
给你一个整数 n
,请你生成并返回所有由 n
个节点组成且节点值从 1
到 n
互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
示例 1:
输入:n = 3 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
|
示例 2:
提示:
C++
class Solution { public: vector<TreeNode*> dfs(int start, int end) { if (start > end) return { nullptr }; vector<TreeNode*> allTrees; for (int i = start; i <= end; i++) { vector<TreeNode*> leftTrees = dfs(start, i - 1);
vector<TreeNode*> rightTrees = dfs(i + 1, end);
for (auto& left : leftTrees) { for (auto& right : rightTrees) { TreeNode* currTree = new TreeNode(i); currTree->left = left; currTree->right = right; allTrees.push_back(currTree); } } } return allTrees; }
vector<TreeNode*> generateTrees(int n) { if (!n) return {}; return dfs(1, n); } };
|