मान लीजिए कि हमारे पास एक पूर्णांक n है, हमें सभी संरचनात्मक रूप से अद्वितीय बाइनरी सर्च ट्री को गिनना होगा जो 1 से n तक के मानों को संग्रहीत करते हैं। तो अगर इनपुट 3 है, तो आउटपुट 5 होगा, जैसे पेड़ होंगे -

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n + 1 आकार की एक सरणी बनाएं
- dp[0] :=1
- i के लिए:=1 से n
- जे के लिए:=0 से i - 1
- dp[i] :=dp[i] + (dp[i – 1 – j] * dp[j])
- जे के लिए:=0 से i - 1
- रिटर्न डीपी[एन]
उदाहरण(C++)
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numTrees(int n) {
vector <int> dp(n+1);
dp[0] = 1;
for(int i =1;i<=n;i++){
for(int j = 0;j<i;j++){
//cout << j << " " << i-1-j << " " << j << endl;
dp[i] += (dp[i-1-j] * dp[j]);
}
}
return dp[n];
}
};
main(){
Solution ob;
cout << ob.numTrees(4);
} इनपुट
4
आउटपुट
14