The 2 subtrees here will be independent of each other. Therefore it will be ( B i-1 * B n-i ) for Bi . For n nodes (as i has n choices) it will be :
Since the recurrence relation is same as of catalan numbers , so count of BST is given by Cn.
Recurrence relation:
This gives complexity O(4^n). Complexity can be reduced to O(n^2) by using DP.
C++ implementation:
#include <iostream>
using namespace std;
int CN(int n){
int Cn =0;
// base case
if(n==0) // empty tree
{
return 1;
}
for(int i=1;i<n+1;i++)
{
Cn+= CN(i-1)*CN(n-i);
}
return Cn;
}
int main(){
int n;
cout<<"Enter number of nodes: ";
cin>>n;
cout<<n<<endl;
int trees=CN(n);
cout<<trees<<" binary search trees are there for "<<n<<" nodes"<<endl;
return 0;
}
Output
Enter number of nodes: 4
14 binary search trees are there for 4 nodes
If we consider root as the ith node then:
Let’s denote count of BST by Bn for n elements
The 2 subtrees here will be independent of each other. Therefore it will be ( B i-1 * B n-i ) for Bi . For n nodes (as i has n choices) it will be :
Since the recurrence relation is same as of catalan numbers , so count of BST is given by Cn.
Recurrence relation:
This gives complexity O(4^n). Complexity can be reduced to O(n^2) by using DP.
C++ implementation:
Output