二叉树比较节点从叶子到根python ete2工具的特性

2024-05-29 00:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一棵二叉树:

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

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

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

  • 比较有评分的叶片与其姊妹的b分与c分
  • d.分数=最大(b.分数,c.分数)

  • e、f和h相同

  • 比较a.seq和d.seq==>;d和e将得分
  • g、 最高得分(e.score,a.score)。。。直到根底 注意:每个叶节点都有“model feature”,我比较b.seq和c.seq基于b.model==>;我得到了b.score,然后基于c.model==>;我得到了c.score

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

定义影响得分(n):

^{pr2}$

谁能告诉我我是否在思考写作? 请注意,这是我第一次使用树数据结构和递归 提前谢谢你的建议


Tags: 函数gtmodel节点序列root特性评分
1条回答
网友
1楼 · 发布于 2024-05-29 00:10:35

好吧,让我们重温一下递归。在

在执行递归函数时,首先要写的是“退出条件”(在某个时刻终止递归的东西)。 在您的例子中,exit条件应该引用树的叶节点,它应该类似于:

if len(n.get_childreen())==0:
    return n.score

然后,对于其他每个节点,应进行计算:

^{pr2}$

那么你还需要一个特殊的根条件,因为它没有任何姐妹:

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()方法,该方法应比较两个序列,并可能根据您的代码调整某些内容。但从理论上讲,这几乎是正确的。在

相关问题 更多 >

    热门问题