LeetCode 894. All Possible Full Binary Trees
LeetCode 894. All Possible Full Binary Trees python solution
题目描述
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.
解析
需要使用递归的方法进行求解。因为要求是完全的二叉树,所以节点数不可以为偶数。当节点数为1时,情况唯一。当节点数为3时,解唯一。当节点数为5时,有两个解。分别是第二层的左子树为根节点,或第第二层的右子树为根节点。即左3右1,或者左1右3。同理,若一共9个节点,那么一共有四种情况,左7右1,左5右3,左3右5,左1右7。
需要将多层树分解成基本树进行所有可能的遍历。
// An highlighted block
class Solution:
def allPossibleFBT(self, N: int) -> List[TreeNode]:
if N % 2==0: return []
if N==1: return [TreeNode(0)]
res=[]
l=N-2
r=1
while l>0:
templ=self.allPossibleFBT(l)
tempr=self.allPossibleFBT(r)
L=len(templ)
R=len(tempr)
for i in range(L):
for j in range(R):
root=TreeNode(0)
root.left=templ[i]
root.right=tempr[j]
res.append(root)
l-=2
r+=2
return res