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 []
类似于之前的所有二叉搜索树, 分别求所有的左树, 所有的右树, 然后进行笛卡尔积连接