📅  最后修改于: 2023-12-03 15:27:36.335000             🧑  作者: Mango
预排序序列是指一个二叉树的先序遍历结果,即根节点在序列的最前面,左子树在根节点的右边,右子树在左子树的右边。给定一个预排序序列的长度,求二叉树的个数。
使用递归的方式求解。
假设当前序列的根节点为root,则可以将序列分成两部分:左子树的序列和右子树的序列。
假设序列的长度为n,则可以枚举左子树的长度l(0 <= l < n),那么右子树的长度就是n-l-1。
然后分别递归计算左子树的二叉树个数和右子树的二叉树个数,并将它们相乘,就可以得到以root为根节点的二叉树个数。
最后将所有以不同节点为根节点的二叉树个数相加,就是该预排序序列长度的二叉树个数。
def numTrees(n):
if n <= 1:
return 1
res = 0
for i in range(n):
res += numTrees(i) * numTrees(n-i-1)
return res