Leetcode 96. 不同的二叉搜索樹

題目描述

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

示例 1:

解法

不妨以 f(i) 表示 i 個整數能夠組成的二叉搜索樹的種類數。則對於 n 個整數組成搜索樹的種類數,需要分別計算出左子樹個數爲 0 時二叉樹的種類數,左子樹個數爲 1 時二叉樹的種類數......左子樹個數爲 n-1 時二叉樹的種類數,然後相加即可。

若整數個數爲 n,當左子樹個數爲 x 時,則右子樹個數爲 n-1-x,此時二叉樹的種類數爲 f(x)*f(n-1-x)

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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章