# Count Balanced Binary Trees of Height h

Given a height h, count and return the maximum number of balanced binary trees possible with height h. A balanced binary tree is one in which for every node, the difference between heights of left and right subtree is not more than 1.

Examples:

```Input : h = 3
Output : 15

Input : h = 4
Output : 315
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Following are the balanced binary trees of height 3.

Height of tree, h = 1 + max(left height, right height)
Since the difference between the heights of left and right subtree is not more than one, possible heights of left and right part can be one of the following:

1. (h-1), (h-2)
2. (h-2), (h-1)
3. (h-1), (h-1)
```count(h) = count(h-1) * count(h-2) +
count(h-2) * count(h-1) +
count(h-1) * count(h-1)
= 2 * count(h-1) * count(h-2) +
count(h-1) * count(h-1)
= count(h-1) * (2*count(h - 2) +
count(h - 1))
```

Hence we can see that the problem has optimal substructure property.

A recursive function to count no of balanced binary trees of height h is:

```int countBT(int h)
{
// One tree is possible with height 0 or 1
if (h == 0 || h == 1)
return 1;
return countBT(h-1) * (2 *countBT(h-2) +
countBT(h-1));
}
```

The time complexity of this recursive approach will be exponential. The recursion tree for the problem with h = 3 looks like :

As we can see, sub-problems are solved repeatedly. Therefore we store the results as we compute them.
An efficient dynamic programming approach will be as follows :

```// C++ program to count number of balanced
// binary trees of height h.
#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;

long long int countBT(int h) {

long long int dp[h + 1];
//base cases
dp[0] = dp[1] = 1;
for(int i = 2; i <= h; i++) {
dp[i] = ((dp[i - 1] * ((2 * (dp [i - 2] + dp[i - 1])%mod)%mod)) % mod);
}
return dp[h];
}

// Driver program
int main()
{
int h = 3;
cout << "No. of balanced binary trees"
" of height h is: "
<< countBT(h) << endl;
}
```

Output:

```No of balanced binary trees of height h is: 15
```

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
3.2 Average Difficulty : 3.2/5.0
Based on 8 vote(s)