需要帮助来阅读算法/代码

时间:2015-08-17 16:24:17

标签: algorithm

此算法返回多少?因为左[x]没有孩子,所以不是1吗?

NIL =没有孩子 left[x] =离开孩子 right[x] =正确的孩子

LEAVES是算法的名称

if (x = nil) then
return 0
else if left[x] = nil then
return 1
else
return Leaves(left[x]) + Leaves(right[x])
end if

enter image description here

1 个答案:

答案 0 :(得分:0)

我假设您希望算法返回树中的叶子数。在这种情况下,如果节点等于NIL,则节点是叶子。因此算法应该是:

def Leaves(x):
    if(NotANode(x)):
        return 0
    if(x==nil):
        return 1
    return Leaves(left[x]) + Leaves(right[x])

注意:我喜欢使用类似python的格式来伪代码/算法描述。希望你不要介意:)另请注意,如果left[x]只缺少正确的孩子(反之亦然),你没有提到x是什么。我假设它返回了一个非节点值,并使用组合函数NotANode来计算它。

可能的解释

根据你提出这个问题的方式,我猜这个算法是给你的,你不认为它是正确的。你可能不理解它的目的吗?

通常在编程中nilNULL用于表示"空"宾语。所以第一行if x = nil检查x x是否真的是一个节点!如果不是那么它返回0(假设Leaves的目的是计算树中叶子的数量)是正确的行为。

接下来,我们检查x的左侧孩子是否存在。如果没有,那么我们返回1.这条线理解的唯一方法是,如果我们可以假设每个节点首先填充它的左子,那么没有一个左孩子意味着你没有一个正确的孩子所以你是一个叶子节点(因此结果为1)。

最后,如果你有一个左孩子,那么给定的节点一片叶子,所以我们必须查看它的子树,并计算他们的叶子为了答案。

查看此算法的来源,以确保您了解问题的约束,并在需要更多帮助时告诉我们:)