Leetcode 96 不同的二叉搜尋樹

2022-09-09 20:27:27 字數 1083 閱讀 7226

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 ...