​894. 所有可能的满二叉树​

难度中等

满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。

返回包含 ​​N​​ 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。

答案中每个树的每个​​结点​​都必须有 ​​node.val=0​​。

你可以按任何顺序返回树的最终列表。

class Solution:
def allPossibleFBT(self, N: int) -> List[TreeNode]:

def allTree(start, end):
if start > end:
return [None]
if start == end:
return [TreeNode(0)]

res = []
for i in range(start, end + 1):
if i & 1:
continue
lefts = allTree(start, i - 1)
rights = allTree(i + 1, end)
for left in lefts:
for right in rights:
node = TreeNode(0)
node.left = left
node.right = right
res.append(node)
return res

return allTree(1, N) if N >= 1 and N & 1 else []

类似于之前的所有二叉搜索树, 分别求所有的左树, 所有的右树, 然后进行笛卡尔积连接

894. 所有可能的满二叉树_python