0

我有一个二叉树:

       root
     /     \
    g      h
   / \    / \
 d   a   e   f
 / \
b   c

每个节点都有 'seq' 特征,它存储每个节点的 dna 序列('AACCGGT')

都是叶子(b,c和e,f)的姐妹每个都有一个分数(float)我想要的是:

  • 将有分数的叶子的分数与它的妹妹 b.score 与 c.score 进行比较
  • d.score = max (b.score,c.score)

  • e、f 和 h 相同

  • 比较 a.seq 和 d.seq ==> d 和 e 会有一个分数
  • g.score max (e.score, a.score) ...直到到达根节点注意:每个叶节点都有“模型特征”我根据 b.model 比较 b.seq 和 c.seq ==>我得到了b.score 然后基于 c.model ==> 我得到了 c.score

这是我写的函数,但我不确定它是否符合我的要求,我无法测试它,因为我还没有 align_trna 函数

def effect_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

l

谁能帮助我告诉我是否正在考虑写作?请注意,这是我第一次使用树数据结构和递归提前感谢任何建议

4

1 回答 1

2

好的,让我们尝试回顾一下有关递归的内容。

执行递归函数时首先要写的是“退出条件”(在某个点终止递归的东西)。在您的情况下,退出条件应该是指树的叶节点,它类似于:

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() ,这是应该比较两个序列的方法,并且可能会根据您的代码进行调整。但理论上它应该几乎是正确的。

于 2013-08-21T12:54:06.523 回答