96. 不一樣的二叉搜索樹

96. 不一樣的二叉搜索樹

題意

給定一個整數 n,求以 1 ... n 爲節點組成的二叉搜索樹有多少種?web

解題思路

對於n個結點,除去了跟結點,還剩餘n-1個結點,所以左右子樹的結點數分配方式以下:ide

假定G(n)表示由連續的n個數造成的二叉搜索樹的個數,而且以i做爲分界點,svg

那麼左子樹爲G(i-1),右子樹爲G(n-i),那麼公式則爲:post

能夠發現這就是卡特蘭數的應用,這種應用一般使用動態規劃來解決;spa

實現

class Solution(object):
   def numTrees(self, n):
       """
      :type n: int
      :rtype: int
      """
       dp = [0] * (n+1)
       dp[0] = dp[1] = 1
       # 假定一共有n個數,而且以j做爲分界線
       for i in range(2, n+1):
           for j in range(1, i+1):
               dp[i] += dp[j-1] * dp[i-j]
       return dp[n]
相關文章
相關標籤/搜索