給定乙個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
主要參考:
本題其實是構造卡特蘭數的應用,採用動態規劃思想求解。通過求解出子問題來實現最終問題的求解。對於n個結點,除去根節點,還剩餘n-1個結點,因此左右子樹的結點數分配方式如下所示:
(0,n-1), (1,n-2), (2, n-3), ....(n-1,0)
我們可以簡單的得到:
則可以依次計算得到n個結點時二叉樹的種類,即:
dp(n)=dp(0)*dp(n-1)+dp(1)*dp(n-2)+dp(2)*dp(n-3)+...+dp(n-1)*dp(0)
為什麼這麼做呢?
因為,所有的節點對應的數字是不同的。那麼,只要節點數是相同的,對應能夠產生的二叉搜尋樹的數量就是相同的。例如:
可以產生的二叉搜尋樹的數量和可以產生的二叉搜尋樹的數量是相同的。每一次,每棵子樹,左子樹可能的種數和右子樹可能的種數相乘就是總共的組合數。當每一邊為空的時候,也算作是一種情況,所以又dp[0]=1。
由此,**如下。
class solution
};
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個點,那麼...
leetcode96 不同的二叉搜尋樹
給定乙個整數 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 ...
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...