题目描述:
满二叉树是一类二叉树,其中每个结点恰好有 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]]
解释:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def allPossibleFBT(self, N):
"""
:type N: int
:rtype: List[TreeNode]
"""
#思路:对于每一颗子树,对于固定的子树节点个数n,其左子树的节点个数可以为1、3、5...n-1;右子树的节点个数可以为n-1...5、3、1;从根节点不断寻找所有可能存入res列表中去
if N == 1:
return [TreeNode(0)]
res = []
#对根节点的左右子树个数进行划分
for i in range(1,N,2):
#由已知的左右子树个数去获取子树的所有可能情况
for left in self.allPossibleFBT(i):
for right in self.allPossibleFBT(N-i-1):
node = TreeNode(0)
node.left = left
node.right = right
res.append(node)
return res
菜鸟一枚,代码仅供参考,如有问题,望指正~