考虑以下二叉树:(取自here)
鉴于叶节点将为true或false,我如何找到所有叶节点都为真的分支(或分支)?
因此,如果只有8,5,6或7为真,则第一个分支将不匹配(它需要9才能匹配),但第二个分支将匹配,因为它的所有叶子都为真。
即使为此类搜索识别此名称也会有所帮助,因此我可以将其谷歌。
答案 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操作)。通过这种方式,您可以使用所需的属性标记整个树。