動態規劃 LeetCode96 不同的二叉搜尋樹

2021-09-10 01:38:48 字數 1415 閱讀 8968

題目

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

示例:輸入: 3

輸出: 5

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

1 3 3 2 1

\ / / / \ \

3 2 1 1 3 2

/ / \ \

2 1 2 3

二叉搜尋樹

思路1

遞迴。具體見**。這種思路很慢。這種思路可以返回所有的二叉搜尋樹(leetcode97)。

**1

class solution 

return sum;

}// b: begin 開始索引

// e:end 結束索引

// m:根節點

public int w(int b,int m,int e)

// 根節點左邊的數量

int leftsum=0;

for(int i=b;i<=m-1;i++)

// 根節點右邊的數量

int rightsum=0;

for(int j=m+1;j<=e;j++)

// 總數=左邊數量*右邊數量

int sum=0;

if(leftsum==0 && rightsum==0)else if(leftsum==0 && rightsum!=0)else if(leftsum!=0 && rightsum==0)else

return sum;

}}

思路2

動態規劃。關鍵思路:選好根節點後,該根節點下總數=根節點左邊總數*根節點右邊總數。

n = 2的:

dp[2] =  dp[0] * dp[1]   (1為根的情況)

+ dp[1] * dp[0]    (2為根的情況)

n = 3 的情況:

dp[3] =  dp[0] * dp[2]   (1為根的情況)

+ dp[1] * dp[1]    (2為根的情況)

+ dp[2] * dp[0]    (3為根的情況)

**2

class solution 

}return nums[n];

}}

總結

動態規劃。

leetcode96 不同的二叉搜尋樹 動態規劃

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3輸出 5解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 13 321 321132 2123借助動態規劃的思想 計算由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 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主要參考 本題其實是構造卡特蘭數的應用,採用動態規劃思想求解。通過求解出子問題來實現最終問題的求...