不同的二叉搜尋樹

2021-10-11 15:51:06 字數 860 閱讀 1349

不同的二叉搜尋樹

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

示例:

輸入: 3

輸出: 5

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

1 3 3 2 1

\ / / / \ \

3 2 1 1 3 2

/ / \ \

2 1 2 3

動態規劃

假設n個節點存在二叉排序樹的個數是g(n),令f(i)為以i為根的二叉搜尋樹的個數

g(n) = f(1) + f(2) + ... + f(n)

當i為根節點時,其左子樹節點個數為i-1個,右子樹節點為n-i,則

f(i) = g(i-1)*g(n-i)

綜合兩個公式可以得到 卡特蘭數 公式

g(n) = g(0)×g(n-1)+g(1)×(n-2)+...+g(n-1)×g(0)

public int numtrees(int n) 

}return dp[n];

}

g(n)函式的值在數學上被稱為卡塔蘭數

c0=1

cn+1=cn×2×(2n+1)/(n+2)

public int numtrees(int n) 

return (int) c;

}

不同的二叉搜尋樹

題目 力扣 解題思路 可以看注釋 class solution return helper choice,k choice表示選擇,按大小順序排列,k表示取第k個序列,從1開始計數 public string helper listchoice,int k 以某一元素開頭的序列個數,一共有n n個 ...

不同的二叉搜尋樹

leetcode演算法 演算法題 動態規劃 dp i 代表的是長度為i的序列所能構成多少個不同的二叉搜尋樹 f x,i 代表的是以x為根,長度為i所能構成的不同的二叉搜尋樹的種類 那麼dp i f 1,i f 2,i f i,i 同時f x,i 的公式也出來了1 2 3 4 x i 1 i 可以發現...

不同的二叉搜尋樹

示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 2.1 思路分析當求解問題的方案總數時往往能夠聯想到動態規劃,而動態規劃是能夠將原問題分解為多個子問題,因此能不能使用動態規劃需要分析該問題能否分解為子問題 ...