1.動態規劃
對於有序娛樂1-n構建二叉搜尋樹,我們可以遍歷,對數字i,將i作樹根,則1--i-1構成其左子樹,i+1--n構成其右子樹。
設g(n):長度為n的序列構成的二叉搜尋樹的個數
f(i):以i為根節點的二叉搜尋樹個數
得到:g(n)=f(1)+f(2)+.......+f(n)
對於邊界值,即n=0或1時,分別對應空樹和只有根,則g(0)=g(1)=1.
對於f(i),即以i為根節點,其左子樹有1---i-1構成,長度為(i-1);右子樹右i+1---n構成,長度為(n-i),
得到f(i)=g(i-1)*(n-i)
即g(n)=g(0)*g(n-1)+g(1)*g(n-2)+...+g(i-1)*g(n-i)+....+g(n-1)*g(0).
由於g(n)依賴g(0)---g(n-1),故從小到大依次計算,
且初始化g(0)=g(1)=1
**如下:
class solution
};
2.數學公式
右遞迴公式知為卡特蘭數,
該數簡單定義如下:
可自行編寫**
LeetCode 不同的二叉搜尋樹 II
給定乙個整數 n,生成所有由 1 n 為節點所組成的二叉搜尋樹。示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 ...
Leetcode 不同的二叉搜尋樹 II
給定乙個整數 n,生成所有由 1 n 為節點所組成的二叉搜尋樹。示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 ...
LeetCode之不同的二叉搜尋樹
解題步驟 題目可以轉換為求以i 1 i n 為根節點的不同結構的二叉樹數量,然後相加就可以的出答案。假如我們以i為根節點,左子樹由 1,i 1 構成,右子樹由 i 1,n 構成。由於二叉搜尋樹左節點值小於根節點值,右節點值大於根節點值,並對所有子樹都成立,所以左子樹 1,i 1 與右子樹 i 1,n...