題目描述
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 假設空樹也是一顆樹 ...