题目:
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
思路:
看到二叉树,先来个左右遍历孩子,将左孩子数*有孩子数 dfs 2秒完事。
代码 dfs
public int numTrees(int n) {
if (n == 0 || n == 1){
return 1;
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans += numTrees(i -1) * numTrees(n - i);
}
return ans;
}
勉强通过,有点难受。
代码 动态规划
public int numTrees(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp[n];
}