Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Definition for a binary tree node.
- * struct TreeNode {
- * int val;
- * TreeNode *left;
- * TreeNode *right;
- * TreeNode() : val(0), left(nullptr), right(nullptr) {}
- * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
- * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
- * };
- */
- class Solution {
- unordered_map<int, vector<TreeNode*>> memo;
- public:
- vector<TreeNode*> allPossibleFBT(int n) {
- vector<TreeNode*> ans;
- if(memo.count(n)) return memo[n];
- if(n == 1){
- TreeNode *node = new TreeNode(0);
- ans.push_back(node);
- memo[n] = ans;
- }
- else{
- for(int i=1; i<=n-2; i+=2){
- vector<TreeNode*> left = allPossibleFBT(i);
- vector<TreeNode*> right = allPossibleFBT(n-i-1);
- for(int i=0; i<left.size(); i++){
- for(int j=0; j<right.size(); j++){
- TreeNode *node = new TreeNode(0);
- node->left = left[i];
- node->right = right[j];
- ans.push_back(node);
- }
- }
- }
- memo[n] = ans;
- }
- return memo[n];
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment