# 96. 不同的二叉搜索树
难度:中等
# 题目:
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1
提示:
1 <= n <= 19
# 想法:
以 为根节点,左子树是, 右子树是。对应的个数是;
var numTrees = function(n) { | |
//n 个节点对应个数 | |
let dp=[1,1,2]; | |
if(n<3){ | |
return dp[n]; | |
} | |
// 从 3 到 n 计算 dp [i] | |
for(let i=3;i<=n;i++){ | |
let sum=0; | |
// 以 j 为根节点,左子树是 1~j, 右子树是 j+1~i。对应的个数是 dp [j]*dp [i-j-1]; | |
for(let j=0;j<i;j++){ | |
sum+=dp[j]*dp[i-j-1]; | |
} | |
dp[i]=sum; | |
} | |
return dp[n]; | |
}; |