1、题目链接
https://leetcode-cn.com/problems/all-possible-full-binary-trees/comments/
2.解题思路
满二叉树的话,肯定是个偶数节点,因为你除了第一个节点之外,都是左右对称的
现在这个树一共是N个节点的话,根节点算一个,左子树一共i个,那右子树一共就N-1-i个。
然后迭代的时候每次左边+2个,右边-2个。把所有的结果加起来就好啦。
3、代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<TreeNode> allPossibleFBT(int N) {
List<TreeNode> ans = new ArrayList<>();
if (N % 2 == 0) {
return ans;
}
if (N == 1) {
TreeNode head = new TreeNode(0);
ans.add(head);
return ans;
}
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;
ans.add(head);
}
}
}
return ans;
}
}