次のアルゴリズムを実装しようとしています。
Fitch のアルゴリズム (1 文字シーケンスの場合):
ステップ 1: 各リーフ ノード n に対して、リーフに割り当てられた文字を含むセット Sn を作成します。
ステップ 2: 子 u と v を持つ内部ノード n ごとに、次の集合 Sn を作成します。 • Su ∩ Sv が空でない場合は、Su ∩ Sv。• Su ∩ Sv が空の場合、Su U Sv。
ステップ 3: 親 p を持つ内部ノード n ごとに、n.seq に次の文字を割り当てます。
入力として二分木が与えられます。
ステップ 1 を完了したので、バイナリ ツリーを介してポストオーダー ナビゲーションを再帰的に実行して、すべてのノードにセットを割り当てる必要があります。これをどのように開始するのだろうか?
事前順序再帰を使用したツリーのナビゲートは、次のように行われます (これは、ツリー内にあるリーフの数によって決定されるツリーの長さを計算する単なる例です。リーフ = 子なし):
def __len__(self):
if self.isLeaf():
print('base case - reached leaf!')
return 1
for t,w in self.children:
print('not leaf so sent through loop')
numLeaves += len(t)
return numLeaves