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.
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
Solution:
Different from Unique Binary Search Trees II problem, in this problem, there is no need to know exact information contained in each node. All we need to know is for a given number of nodes, how many different unique BST can be generated. The solution is very similar to Fibonacci sequence problem.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
int helper(int Num, vector<int>& map){ | |
if(map[Num]!=0) | |
return map[Num]; | |
int num=0; | |
for(int i=1; i<=Num; i++){ | |
int n0=helper(i-1, map); | |
int n1=helper(Num-i, map); | |
num+=n0*n1; | |
} | |
map[Num]=num; | |
return num; | |
} | |
int numTrees(int Num) { | |
vector<int> map(Num+1, 0); | |
map[0]=1; | |
map[1]=1; | |
int num=helper(Num, map); | |
return num; | |
} | |
}; |
No comments:
Post a Comment