查找具有所有叶节点的分支是正确的

时间:2013-02-05 12:56:12

标签: algorithm binary-tree

考虑以下二叉树:(取自here

鉴于叶节点将为true或false,我如何找到所有叶节点都为真的分支(或分支)?

因此,如果只有8,5,6或7为真,则第一个分支将不匹配(它需要9才能匹配),但第二个分支将匹配,因为它的所有叶子都为真。

即使为此类搜索识别此名称也会有所帮助,因此我可以将其谷歌。

2 个答案:

答案 0 :(得分:2)

您可以使用递归函数,深入树中并自下而上确定某个分支是否所有叶子都为真。然后可以将这些分支存储在某个列表中。

这是一些Python代码。调用此函数时,树的根节点作为第一个参数,空列表作为第二个参数,列表将填充正确的分支。

def allTrue(node, trueList=[]):
    if isLeaf(node):
        return node.value == True
    else:
        leftTrue = allTrue(node.left, trueList)
        rightTrue = allTrue(node.right, trueList)
        bothTrue = leftTrue and rightTrue
        if bothTrue:
            trueList.append(node)
        return bothTrue

有一点需要注意:如果x and y已经为假,那么很多编程语言都会通过不评估x的第二个参数来尝试变得聪明或懒惰。但是,在这种情况下,如果左分支不是全真,则会导致不访问右分支,从而错过了一些全真分支。因此,递归调用更好地分隔线。

答案 1 :(得分:0)

如果两个子节点的子树的所有叶子都为true,则可以进行后序树遍历并将每个非叶节点标记为true,否则为false(这是子节点标签的AND操作)。通过这种方式,您可以使用所需的属性标记整个树。