题目描述:
满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。
返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。
答案中每个树的每个结点都必须有 node.val=0。
你可以按任何顺序返回树的最终列表。
示例:
输入:7
输出:[[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]]
解释:
使用递归没整出来,看别人实现的代码:
class Solution {
public List<TreeNode> allPossibleFBT(int N) {
List<TreeNode> list = new ArrayList<>();
// N如果是偶数肯定不能满足
if ((N & 1) == 0) {
return list;
}
if (N == 1) {
TreeNode root = new TreeNode(0);
root.left = null;
root.right = null;
list.add(root);
return list;
} else {
for (int i = 1; i < N; i += 2) {
List<TreeNode> left = allPossibleFBT(i);
List<TreeNode> right = allPossibleFBT(N - 1 - i);
for (TreeNode l : left) {
for (TreeNode r : right) {
TreeNode head = new TreeNode(0);
head.left = l;
head.right = r;
list.add(head);
}
}
}
return list;
}
}
}