我正在尝试实现以下算法:
Fitch 的算法(对于一个字符序列):
步骤 1:对于每个叶节点 n,创建一个包含叶分配字母的集合 Sn。
第 2 步:对于每个具有子 u 和 v 的内部节点 n,创建一个集合 Sn 等于: • 如果 Su ∩ Sv 不为空,则 Su ∩ Sv。• 如果Su ∩ Sv 为空,则Su U Sv。
第 3 步:对于每个具有父 p 的内部节点 n,分配 n.seq 一个字符等于: • p.seq 如果 p.seq ∈ Sn • 否则 Sn 的任何字符(或者如果 n 是根)。
我得到一个二叉树作为输入。
我已经完成了第一步,现在需要通过二叉树递归地进行后序导航,以将集合分配给每个节点。我想知道如何开始这个?
使用前序递归在树中导航是这样完成的(这只是一个计算树长度的示例,该长度取决于树中有多少叶子。叶子 = 没有孩子):
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