Day23 Task95 不同的二叉搜尋樹

2021-10-04 07:46:24 字數 1959 閱讀 2168

題目描述

95.不同的二叉搜尋樹ⅱ

給定乙個整數 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 種不同結構的二叉搜尋樹:

133

21\ /

// \ \

321132/

/ \ \

2123

解題思路
二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

基於二叉搜尋樹的概念,看到這道題的第一思路是,從1到n,分別令每個值當樹根建立二叉搜尋樹。但是在實現過程中發現並不是這麼簡單。

由於對於每乙個 val=i 的根節點,其建立的二叉搜尋樹並不是唯一的,還與資料輸入的順序有關。因此採用上述方法不成立。

參考題解後,發現對於整數n,由 1 … n 為節點所組成的二叉搜尋樹是有規律的。這種規律符合卡特蘭數的規律。

卡特蘭數又稱卡塔蘭數,英文名catalan number,是組合數學中乙個常出現在各種計數問題**現的數列。以比利時的數學家歐仁·查理·卡塔蘭 (1814–1894)的名字來命名,其前幾項為(從第零項開始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, …

卡特蘭數cn滿足以下遞推關係:

而由 1 … n 為節點所組成的二叉搜尋樹g(n)則滿足一定遞推規律。參考96.不同的二叉搜尋樹題解。

對於以 i 為根節點的二叉樹,可產生g(i-1)種左子樹,g(n-i)種右子樹。因此可以根據這個規律,分別遞迴建立二叉搜尋樹的左右子樹,並在最後將其合併到根節點root

時間複雜度:o((4n)/(n(1/2)))

**如下

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

else}}

}//返回全部二叉搜尋樹集合all_trees

return all_trees;

} vector

>

generatetrees

(int n);}

else}}

;

執行結果

Day 23 不同的二叉搜尋樹 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 ...

95 不同的二叉搜尋樹

題目 給定乙個整數 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...

95 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 使用dp n 表示1 n可以用多少顆不同的二叉搜尋樹,那麼 dp 0 1 假設空樹也是一顆樹 ...