leetcode96 不同的二叉搜尋樹

2021-09-28 15:44:18 字數 1417 閱讀 7763

一.  本來想模仿leetcode95_不同的二叉搜尋樹2的遞迴方法的,但是很遺憾的是超時了.

//超時

二.  只好參考官方解答了.

方法一:動態規劃(思路相同,只不過沒用遞迴,而是用的動態規劃).

1.  本問題可以用動態規劃求解。

2.  給定乙個有序序列 1 ... n,為了根據序列構建一棵二叉搜尋樹。我們可以遍歷每個數字 i,將該數字作為樹根,1 ... (i-1) 序列將成為左子樹,(i+1) ... n 序列將成為右子樹。於是,我們可以遞迴地從子串行構建子樹。

在上述方法中,由於根各自不同,每棵二叉樹都保證是獨特的。

3.  可見,問題可以分解成規模較小的子問題。因此,我們可以儲存並復用子問題的解,而不是遞迴的(也重複的)解決這些子問題,這就是動態規劃法.

4.  問題是計算不同二叉搜尋樹的個數。為此,我們可以定義兩個函式:

g(n): 長度為n的序列的不同二叉搜尋樹個數。

f(i,n): 以i為根的不同二叉搜尋樹個數(1≤i≤n)。

//動態規劃

class solution

} return g[n];

}};

複雜度分析

1.  時間複雜度 : 上述演算法的主要計算開銷在於包含 g[i] 的語句。因此,時間複雜度為這些語句的執行次數,也就是 o(n^2)。

2.  空間複雜度 : 上述演算法的空間複雜度主要是儲存所有的中間結果,因此為 o(n)。

方法二:數學演繹法

1.  事實上 g(n) 函式的值被稱為 卡塔蘭數 。卡塔蘭數更便於計算的定義如下:

2.  有公式就比較容易了.

//直接利用卡塔蘭數的公式.

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