我有一棵二叉树
root
/ \
g h
/ \ / \
d a e f
/ \
b c每个节点都具有“seq”特性,它存储每个节点('AACCGGT')的dna序列。
两个姐妹都是叶子(b,c和e,f),她们每人都有一个分数(浮动),我想要的是:
这是我编写的函数,但我不确定它是否能实现我想要的功能,而且我无法测试它,因为我还没有align_trna函数
def affect_score(n):
if (n.score)==0:
n.score,n.model=affect_score(n.get_children()[0])
result=n.score
model=n.model
if not n.is_root():
sis=n.get_sisters()[0]
if sis.score==0:
sis.score,sis.model=affect_score(sis.get_children()[0])
n.score=align_trna(n.seq,sis.seq,n.model)
sis.score,sis.model= align_trna(nseq, sis.seq,sis.model)
if n.score < sis.score:
result=sis.score
model=sis.model
return result,mode我
有人能通过告诉我是否在思考写作来帮助我吗?请注意,这是我第一次使用树数据结构和递归,谢谢您的任何建议。
发布于 2013-08-21 12:54:06
好的,让我们来回顾一下递归的一些内容。
在执行递归函数时,首先要编写的是“退出条件”(在某个时候终止递归的内容)。在您的示例中,退出条件应该引用树的叶节点,它应该类似于:
if len(n.get_childreen())==0:
return n.score然后,对于每一个其他节点,您应该进行计算:
child_score = max(affect_score(n).get_children()[0], affect_score(n).get_children()[1])
seq = compare_seq(n.seq, n.get_sisters()[0].seq)
n.score = max(child_score, seq)那么你也想在根上有一个特殊的条件,因为它没有姐妹:
if n.is_root():
n.score = max(affect_score(n).get_children()[0], affect_score(n).get_children()[1])最后看起来应该是:
def affect_score(n):
if len(n.get_childreen())==0:
return n.score
if n.is_root():
n.score = max(affect_score(n).get_children()[0], affect_score(n).get_children()[1])
else:
child_score = max(affect_score(n).get_children()[0], affect_score(n).get_children()[1])
seq = compare_seq(n.seq, n.get_sisters()[0].seq)
n.score = max(child_score, seq)这就是我理解你想要做的!您需要添加compare_seq(),这是应该比较这两个序列的方法,并且可能会使某些内容适应您的代码。但从理论上讲,这几乎是正确的。
https://stackoverflow.com/questions/18351291
复制相似问题