leetcode96 不同的二叉搜尋樹

2021-09-02 09:32:11 字數 953 閱讀 4745

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

示例:

輸入: 3

輸出: 5

解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:

1 3 3 2 1

\ / / / \ \

3 2 1 1 3 2

/ / \ \

2 1 2 3

我們把n = 0 時賦為1,因為空樹也算一種二叉搜尋樹,假設n個節點存在二叉排序樹的個數是g(n),1為根節點,2為根節點,...,n為根節點,當1為根節點時,其左子樹節點個數為0,右子樹節點個數為n-1,同理當2為根節點時,其左子樹節點個數為1,右子樹節點為n-2,所以可得g(n) = g(0)*g(n-1)+g(1)*(n-2)+...+g(n-1)*g(0)。

n = 2的情況可由下面式子算出:

dp[2] =  dp[0] * dp[1]   (1為根的情況)

+ dp[1] * dp[0]    (2為根的情況)

n = 3 的計算方法:

dp[3] =  dp[0] * dp[2]   (1為根的情況)

+ dp[1] * dp[1]    (2為根的情況)

+ dp[2] * dp[0]    (3為根的情況)

由此可以得出卡塔蘭數列的遞推式為:

public int numtrees(int n)

}return dp[n];

}

參考:

leetcode 96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3n 0 表示,有0個點,那麼,可以組成的二叉查詢樹就乙個,那就是空樹 n 1表示,有1個點,那麼...

Leetcode 96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3主要參考 本題其實是構造卡特蘭數的應用,採用動態規劃思想求解。通過求解出子問題來實現最終問題的求...

LeetCode 96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3輸出 5解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 解題思路 動態規劃。令dp i 表示具有i個節點組成的二叉搜尋樹的種類,那麼dp i dp 0 d...