A full binary tree is a binary tree where each node has exactly 0 or 2 children.
Return a list of all possible full binary trees with N
nodes. Each element of the answer is the root node of one possible tree.
Each node
of each tree in the answer must have node.val = 0
.
You may return the final list of trees in any order.
Example 1:
Input: 7 Output: [[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]] Explanation:
Note:
1 <= N <= 20
递归的时候只能分成奇数+奇数+1就可以满足full的性质
class Solution:
def allPossibleFBT(self, N):
"""
:type N: int
:rtype: List[TreeNode]
"""
if N%2==0: return []
memo={}
def helper(n):
if n in memo: return memo[n]
if n==1: return [TreeNode(0)]
res=[]
for i in range(1,n-1,2):
lefts=helper(i)
rights=helper(n-1-i)
for left in lefts:
for right in rights:
root=TreeNode(0)
root.left=left
root.right=right
res.append(root)
memo[n]=res
return res
return helper(N)