Given n, how many structurally unique BST's (binary search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
如果把上例的順序改一下,就可以看出規律了。
比如,以 1 為根的樹的個數,等於左子樹的個數乘以右子樹的個數,左子樹是 0 個元素的樹,右子樹是 2 個元素的樹。
以 2 為根的樹的個數,等於左子樹的個數乘以右子樹的個數,左子樹是 1個元素的樹,右子樹也是 1 個元素的樹。依此類推。
當數組為 1; 2; 3; .....; n 時,基於以下原則的構建的 BST 樹具有唯一性:以 i 為根節點的樹,其左子樹由 [1, i-1] 構成,其右子樹由 [i+1, n] 構成。
定義 f (i) 為以 [1; i] 能產生的 Unique Binary Search Tree 的數目,則
如果數組為空,毫無疑問,只有一種 BST,即空樹,f (0) = 1。
如果數組僅有一個元素 1,只有一種 BST,單個節點,f (1) = 1。
如果數組有兩個元素 1,2,那麼有如下兩種可能
vcjnz8Kjujxicj4KZiAoMykgPSAgICBmICgwKSAqJiMzOyBmICgyKSCjrDEgzqq4+bXEx+m/9jxicj4KICAgICAgICAgICAmIzQzOyBmICgxKSAqJiMzOyBmICgxKSCjrDIgzqq4+bXEx+m/9jxicj4KICAgICAgICAgICAmIzQzOyBmICgyKSAqJiMzOyBmICgwKSCjrDMgzqq4+bXEx+m/9jwvcD4KPHA+PGJyPgrL+dLUo6zTybTLuduy7KOsv8nS1LXDs/YgZiC1xLXdzca5q8q9zqo8YnI+CjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20141227/20141227085152252.jpg" alt="\">
至此,問題劃歸為一維動態規劃。
/********************************* * 日期:2014-12-26 * 作者:SJF0115 * 題目: 96.Unique Binary Search Trees * 來源:https://oj.leetcode.com/problems/unique-binary-search-trees/ * 結果:AC * 來源:LeetCode * 總結: **********************************/ #include#include using namespace std; class Solution { public: int numTrees(int n) { vector f(n+1,0); f[0] = 1; f[1] = 1; for(int i = 2;i <= n;i++){ for(int j = 1;j <= i;j++){ f[i] += f[j-1] * f[i-j]; }//for }//for return f[n]; } }; int main() { Solution solution; cout<