full binary tree is a binary tree where each node has exactly 0 or 2 children.

Return a list of all possible full binary trees with ​​N​​ nodes.  Each element of the answer is the root node of one possible tree.

Each ​​node​​ of each tree in the answer must have ​​node.val = 0​​.

You may return the final list of trees in any order.

 

Example 1:

Input: 7
Output: [[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]
Explanation:

 

Note:

  • ​1 <= N <= 20​

题解:

满二叉树,每个子树都是满二叉树。

每个子树的节点数必为奇数,遍历所有可能的子树,慢慢拼装即可。

class Solution {
public:
vector<TreeNode*> allPossibleFBT(int N) {
vector<TreeNode*> ans;
if (N % 2 == 0) {
return ans;
}
if (N == 1) {
ans.push_back(new TreeNode(0));
return ans;
}
for (int t = 1; t < N; t += 2) {
if (N - t - 1 < 1) {
break;
}
vector<TreeNode*> left = allPossibleFBT(t);
vector<TreeNode*> right = allPossibleFBT(N - t - 1);
for (int i = 0; i < left.size(); i++) {
for (int j = 0; j < right.size(); j++) {
TreeNode* temp = new TreeNode(0);
temp->left = left[i];
temp->right = right[j];
ans.push_back(temp);
}
}
}
return ans;
}
};