LeetCode OJ 96. Unique Binary Search Trees
阿新 • • 發佈:2018-04-21
sea bin ++ store lan values clas value tree
題目
Given n, how many structurally unique BST‘s (binary search trees) that store values 1 ... n?
Example:
Input: 3 Output: 5 Explanation: 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
解答
都怪娃沒有催我更博。。。略略略
樹就是遞歸定義的,自然想到遞歸的方法,確定一個根節點i,由於BST的性質,左右兩邊的節點數可以確定,那麽就可以用同樣的函數去求左右子樹的種類數量,相乘就是以i為根節點的BST的種類數量,遞歸返回的條件是0個節點或1個節點時,這兩種情況下BST的種類數量都是1。
當然直接這麽做會超時,畢竟k個節點的左子樹和n - k - 1個節點的右子樹,n - k - 1個節點的左子樹和k個節點的右子樹得出的結果是一樣的,所以算一遍就好了。。。
下面是AC的代碼:
class Solution { public: int numTrees(int n) { if(n == 0){ return 1; } if(n == 1){ return 1; } int sum = 0; for(int i = 1; i <= n / 2; i++){ sum += numTrees(i - 1) * numTrees(n - i); } sum *= 2; if(n % 2 == 1){ sum += numTrees(n / 2 + 1 - 1) * numTrees(n - n / 2 - 1); } return sum; } };
120
LeetCode OJ 96. Unique Binary Search Trees