# 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[Optional[TreeNode]]:
def backtrack(n):
if n == 0:
return []
if n == 1:
return [TreeNode(0)]
res = []
for l in range(n):
r = n - 1 - l
leftTrees, rightTrees = backtrack(l), backtrack(r)
for t1 in leftTrees:
for t2 in rightTrees:
res.append(TreeNode(0, t1, t2))
return res
return backtrack(n)# 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[Optional[TreeNode]]:
if n % 2 == 0:
return []
if n == 1:
return [TreeNode(0)]
res = []
for left in range(1, n, 2):
leftSubTree = self.allPossibleFBT(left)
rightSubTree = self.allPossibleFBT(n - 1 - left)
for l in leftSubTree:
for r in rightSubTree:
root = TreeNode(0, l, r)
res.append(root)
return res# 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[Optional[TreeNode]]:
dp = {}
def dfs(n):
if n % 2 == 0:
return []
if n == 1:
return [TreeNode(0)]
if n in dp:
return dp[n]
res = []
for left in range(1, n, 2):
leftSubTree = dfs(left)
rightSubTree = dfs(n - 1 - left)
for l in leftSubTree:
for r in rightSubTree:
res.append(TreeNode(0, l, r))
dp[n] = res
return res
return dfs(n)# 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[Optional[TreeNode]]:
if n % 2 == 0:
return []
dp = [[] for _ in range(n + 1)]
dp[1] = [TreeNode(0)]
for nodes in range(3, n + 1, 2):
res = []
for left in range(1, nodes, 2):
right = nodes - 1 - left
for t1 in dp[left]:
for t2 in dp[right]:
res.append(TreeNode(0, t1, t2))
dp[nodes] = res
return dp[n]