给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
分析:这道题有点难度,不太好想,但通过动态规划的方式可以做出来
这道题重点是该如何推出递推公式,可以通过3个节点的二叉搜索树想出来
3个节点的二叉树可以分为以1为头结点的情况+以2为头结点的情况+以3为头结点的情况
每种情况分别可以表示成dp[2]dp[0],dp[1]dp[1],dp[2]*dp[1];
参考代码:
public int numTrees(int n) {
if(n==1) return 1;<br /> int[] dp = new int[n+1];<br /> dp[0]=1;<br /> for(int i=1;i<=n;i++){<br /> for(int j=1;j<=i;j++){<br /> dp[i]+=dp[j-1]*dp[i-j];<br /> }<br /> }<br /> return dp[n];<br /> }
