所有可能的满二叉树(python)

题目描述:

满二叉树是一类二叉树,其中每个结点恰好有 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

 菜鸟一枚,代码仅供参考,如有问题,望指正~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值