96. 不同的二叉搜尋樹
// [96. 不同的二叉搜尋樹](
// n個整數-> 每個整數都可以作為根節點 for(i: n)-> [1, i-1]左子樹, [i+1,n]右子樹 dp[1] = 1
// 遞推公式直接就出來了 dp[i]表示 n=i時候可以構成的種數, dp[i] = dp[left] * dp[right], left(左子樹節點數=i-1),right(右子樹節點數n-i)
// 比如 dp[3] = 根節點為1 + 根節點為2 + 根節點為3, 其中根節點為2時, dp[3] = dp[1] * dp[1] = 1
// 這樣**就很容易寫出來了
class solution
}return dp[n];
}}// 優化, 由於種類數是對稱的, 可以這樣計算 for (int root = 1; root <= i/2; root ++) dp[i] += (dp[root - 1] * dp[i - root])*2; 奇數個數還需要補充左右子樹個數一樣的種類數
class solution2
}// 數學推導就是這樣的
// g(n)=f(1)+f(2)+f(3)+f(4)+...+f(n)
// f(i)=g(i−1)∗g(n−i)
// g(n)=g(0)∗g(n−1)+g(1)∗(n−2)+...+g(n−1)∗g(0) ;卡特蘭數
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 左子樹 右子樹 在...