再帰関数を使用して、ツリーを深く掘り下げ、特定のブランチのすべての葉が true かどうかをボトムアップで判断できます。これらのブランチは、いくつかのリストに保存できます。
ここにいくつかの Python コードがあります。ツリーのルート ノードを最初のパラメータとして、空のリストを 2 番目のパラメータとしてこの関数を呼び出すと、リストに正しいブランチが取り込まれます。
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
注意すべきことの 1 つ: 多くのプログラミング言語は、既に falsex and y
である場合、 の 2 番目の引数を評価しないことによって、賢く、または怠惰になろうとします。x
ただし、この場合、左の分岐がすべて true でない場合、右の分岐にアクセスせず、すべて true の分岐をいくつか見逃してしまいます。したがって、再帰呼び出しは別の行に移動する方がよいでしょう。