不同的二叉搜索树

    技术2023-04-16  96

    一、题目

     

    二、代码 

    动态规划

    设n个节点存在二叉排序树的个数是G(n),f(i)为以i为根的二叉搜索树的个数,则 G(n) = f(1) + f(2) + f(3) + f(4) + ... + f(n) f(i) = G(i-1)*G(n-i)

    综合两个公式可以得到状态转移公式 G(n) = G(0)*G(n-1)+G(1)*G(n-2)+...+G(n-1)*G(0)

    class Solution { public int numTrees(int n) { int[] dp = new int[n+1]; dp[0] = 1; dp[1] = 1; for(int i = 2; i < n + 1; i++){//i是值dp下标 for(int j = 1; j < i + 1; j++){ //将i假设为 n,则不难得到下述状态转移式 dp[i] += dp[j -1] * dp[i - j]; } } return dp[n]; } }

     

    Processed: 0.010, SQL: 9