具有n个节点和x个叶子的AVL搜索树的数量?

时间:2019-02-11 00:46:05

标签: python binary-tree binary-search-tree nodes avl-tree

这个问题是几年前here提出的,但是没有给出正确的答案。

我知道,如果树的左子树和右子树的高度相差不超过一个,则树是AVL平衡的。

给定一定数量的节点(我们称其为n),其中一定数量的节点(例如x)为树叶,那么有多少个不同的AVL平衡树形具有n个节点和x个树叶?

例如there are two tree shapes for 5 nodes and 3 leaves

我试图在我的函数num_trees_w_height中用python实现对this question的可接受答案,然后将其用于计算num_trees中任何高度的树木总数。到目前为止,这是我的代码:

def num_trees_w_height(height, nodes, leaves):
    if nodes == 0 or leaves == 0:
        return 0
    if height > math.log(nodes,2) or leaves > nodes//2+1:
        return 0
    if height == 0:
        return 1
    for h in range(0,height+1):
        for n in range(0,nodes+1):
                return num_trees_w_height(h-1,n,l)\
                    *num_trees_w_height(h-1,nodes-n,leaves-l)\
                    +num_trees_w_height(h-1,n,l)\
                    *num_trees_w_height(h-2,nodes-n,leaves-l)\
                    +num_trees_w_height(h-2,n,l)\
                    *num_trees_w_height(h-1,nodes-n,leaves-l)

def num_trees(nodes, leaves):
    num=0
    for height in range(0,nodes):
        num += num_trees_w_height(height,nodes,leaves)
    return num

但是,当我调用num_trees(5,3)时,我收到一个TypeError信息,说我的递归return语句正在尝试将intNoneType乘以,而当我调用num_trees_w_height(3,5,3)时,得到0。这两个调用都应返回2,如上面的示例所示。

0 个答案:

没有答案