题目:
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例:
输入:n = 3 输出:5
思路:
披着二叉树外套的动态规划题
class Solution { public int numTrees(int n) { //1.dp[i]:由i个节点可以组成的二叉搜索树种树 int[] dp=new int[n+1]; //2.初始化:dp[0]=1,dp[1]=2 dp[0]=1; dp[1]=2; //3.递推公式:dp[3]=2*2+dp[1]*dp[2]*2 dp[i]=dp[i-1]*2+dp[0]*dp[i-2]+dp[1]*dp[i-3]+...+dp[i-2]*dp[0] //4.遍历顺序 for(int i=2;i<n;i++){ int sum=0; for(int j=0;j<=i-2;j++){ sum+=dp[j]*dp[i-2-j]; } dp[i]=dp[i-1]*2+sum; } //5.举例验证 return dp[n-1]; } }
标签:int,二叉,力扣,搜索,节点,dp,96 From: https://www.cnblogs.com/cjhtxdy/p/17153398.html