leetcode96. 不同的二叉搜索树(动态规划)

127 阅读1分钟

给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?

解题思路

*数组含义:dp[i] i个节点的不同组成结构
状态转移:任取节点为根节点,遍历左右子树可能出现的个数,dp[i]=dp[left]dp[right]
初始化:dp[0]=1 空节点也作为一种情况

代码

class Solution {
    public int numTrees(int n) {
      int[] dp=new int[n+1];

      dp[0]=1;
      for(int i=1;i<=n;i++)
      {
          int total=i-1;
          for(int j=total;j>=0;j--)
              dp[i]+=dp[j]*dp[total-j];

      }
      return dp[n];
    }
}