All Possible Full Binary Trees LeetCode solution in C++
1class Solution {2public:3unordered_map<int, vector<TreeNode *>> dp;4int hash(int i, int j) {5return (i * 21 + j);6}7vector<TreeNode *> fn(int l, int r) {8int has = hash(l, r);9if (dp.find(has) != dp.end()) {10return dp[has];11}12vector<TreeNode *> res;13if (r < l) {14return {NULL};15}16if (r == l) {17return {new TreeNode(0)};18}19for (int i = l + 1; i < r; i++) {20vector<TreeNode *> left = fn(l, i - 1);21vector<TreeNode *> right = fn(i + 1, r);22for (auto le : left) {23for (auto ri : right) {24TreeNode *temp = new TreeNode(0);25temp->left = le;26temp->right = ri;27res.push_back(temp);28}29}30}31return dp[has] = res;32}33vector<TreeNode *> allPossibleFBT(int n) {34return fn(1, n);35}