96. 不同的二叉搜索树

image.png
代码随想录

  1. class Solution {
  2. public int numTrees(int n) {
  3. //初始化 dp 数组
  4. int[] dp = new int[n + 1];
  5. //初始化0个节点和1个节点的情况
  6. dp[0] = 1;
  7. dp[1] = 1;
  8. for (int i = 2; i <= n; i++) {
  9. for (int j = 1; j <= i; j++) {
  10. //对于第i个节点,需要考虑1作为根节点直到i作为根节点的情况,所以需要累加
  11. //一共i个节点,对于根节点j时,左子树的节点个数为j-1,右子树的节点个数为i-j
  12. dp[i] += dp[j - 1] * dp[i - j];
  13. }
  14. }
  15. return dp[n];
  16. }
  17. }