題目描述
給定一個整數 n,求以 1 ... n 爲節點組成的二叉搜索樹有多少種?
示例 1:
解法
不妨以 表示 個整數能夠組成的二叉搜索樹的種類數。則對於 個整數組成搜索樹的種類數,需要分別計算出左子樹個數爲 時二叉樹的種類數,左子樹個數爲 時二叉樹的種類數......左子樹個數爲 時二叉樹的種類數,然後相加即可。
若整數個數爲 ,當左子樹個數爲 時,則右子樹個數爲 ,此時二叉樹的種類數爲 。
class Solution:
def numTrees(self, n: int) -> int:
dp=[1]*(n+1)
for i in range(2,n+1):
tmp=0
for j in range(0,i):
tmp=tmp+dp[j]*dp[i-1-j]
dp[i]=tmp
return dp[n]