96 不同的二叉搜尋樹

2022-01-23 02:08:30 字數 676 閱讀 7661

給定乙個整數

n,求以 1 ...

n為節點組成的二叉搜尋樹有多少種?

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

​假定g(n)表示由連續的n個數形成的二叉搜尋樹的個數,並且以i作為分界點,

那麼左子樹為g(i-1),右子樹為g(n-i),那麼公式則為:

可以發現這就是卡特蘭數的應用,這種應用通常使用動態規劃來解決;

class

solution(object):

defnumtrees(self, n):

""":type n: int

:rtype: int

"""dp = [0] * (n+1)

dp[0] = dp[1] = 1

# 假定一共有n個數,並且以j作為分界線

fori

inrange(2, n

+1):

forj

inrange(1, i

+1):

dp[i] += dp[j

-1] *

dp[i-j]

return

dp[n]

96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3思路 這個題目實際上是乙個數學題,設整數p組成的二叉樹共有c p 種情況。當給定乙個整數n的時候...

96 不同的二叉搜尋樹

二叉搜尋樹,又被稱為是二叉查詢樹 二叉排序樹,這種樹其左子樹所有節點的值均小於根節點的值,其右子樹所有節點的值均大於根節點的值,並且其左 右子樹均為二叉搜尋樹。空樹也是二叉搜尋樹。方法一 動態規劃法 這道題可以用動態規劃的思想去解決。由於給定的節點值為1 n,是一組從小到大順序排列的資料,其中,任意...

96 不同的二叉搜尋樹

dp i 代表有 i 個結點 1.i 時候的二叉搜尋樹種數。首先就是要考慮怎麼和之前的dp連線起來,也就是說選擇有幾種。首先可以就直接把 i 這個數放在 i 1 二叉樹的根節點,二叉搜尋樹的種數就是dp i 1 如果把 i 放在左子樹,i 1是根節點,那就有dp 1 dp i 2 左子樹 右子樹 在...