leetcode:96. 不同的二叉搜尋樹
題目在鏈結中,點進去看看吧!
先介紹乙個名詞:卡特蘭數
卡特蘭數cn滿足以下遞推關係:
\[c_=c_0c_n+c_1c_+...+c_nc_0
\]很巧的是,這道題可以利用亞特蘭數計算出有多少個不同的bst。
class solution
}return dp[n];
}};
這道題利用的是動態規劃的思想,遞推得出乙個dp陣列。在找規律的過程中,我們意外發現這道題的答案與亞特蘭數的數學遞推式和dp方程完全一致!
前提條件:這是一顆bst樹,中序遍歷得出的排列等於其公升序排列
首先,當結點數為0時,樹的個數為1
分析當結點數為1時:
取1為根節點,則左子樹的結點數為0,右子樹的結點數為0
因此結點數為1的左右子樹情況為\(1*1=1\)
分析當結點數為2時:
取1為根節點,則左子樹的結點數為0,右子樹的結點數為1
因此1根節點所有可能出現的樹情況為\(1*1=1\)
取2為根節點,則左子樹的結點數為1,右子樹的結點數為0
因此2根節點所有可能出現的樹情況為\(1*1=1\)
因此結點數為2的左右子樹情況為\(1+1=2\)
分析當結點數為3時:
取1為根節點,則左子樹的結點數為0,右子樹的結點數為2
因此1根節點所有可能出現的樹情況為\(1*2=2\)
取2為根節點,則左子樹的結點數為1,右子樹的結點數為1
因此2根節點所有可能出現的樹情況為\(1*1=1\)
取2為根節點,則左子樹的結點數為2,右子樹的結點數為0
因此3根節點所有可能出現的樹情況為\(2*1=2\)
因此結點數為3的左右子樹情況為\(1+2+1=5\)
有興趣可以繼續遞推,總之總結規律:
\[dp[k]=\sum_0^ dp[i]*dp[k-i-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 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主要參考 本題其實是構造卡特蘭數的應用,採用動態規劃思想求解。通過求解出子問題來實現最終問題的求...
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 ...