894. 所有可能的满二叉树
题目描述
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def allPossibleFBT(self, n: int) -> List[TreeNode]:
res = []
def build(n: int, res: list):
if n == 1:
res.append(TreeNode(0))
return
for i in range(1, n, 2): # 不包含n,即除去根节点。从1开始,剩下的左右子树各一半
left = []
right = []
build(i, left) # 建立左子树
build(n - i - 1, right) # 建立右子树
for l in left:
for r in right:
root = TreeNode(0)
root.left = l
root.right = r
res.append(root)
build(n, res)
return res