首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二叉树比较从叶子到根python ete2工具的节点特性

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

Stack Overflow用户
提问于 2013-08-21 07:26:55
回答 1查看 401关注 0票数 0

我有一棵二叉树

代码语言:javascript
复制
       root
     /     \
    g      h
   / \    / \
 d   a   e   f
 / \
b   c

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

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

  • 与其姐姐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) .直到到达根NOte:每个叶节点都有“模型特征”,我将b.seq与基于b.model的c.seq、==>I got b.score、基于c.model ==>的==>进行了比较,得到了c.score

这是我编写的函数,但我不确定它是否能实现我想要的功能,而且我无法测试它,因为我还没有align_trna函数

def affect_score(n):

代码语言:javascript
复制
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

有人能通过告诉我是否在思考写作来帮助我吗?请注意,这是我第一次使用树数据结构和递归,谢谢您的任何建议。

EN

回答 1

Stack Overflow用户

发布于 2013-08-21 12:54:06

好的,让我们来回顾一下递归的一些内容。

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

代码语言:javascript
复制
if len(n.get_childreen())==0:
    return n.score

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

代码语言:javascript
复制
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)

那么你也想在根上有一个特殊的条件,因为它没有姐妹:

代码语言:javascript
复制
if n.is_root():
   n.score = max(affect_score(n).get_children()[0], affect_score(n).get_children()[1])

最后看起来应该是:

代码语言:javascript
复制
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(),这是应该比较这两个序列的方法,并且可能会使某些内容适应您的代码。但从理论上讲,这几乎是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18351291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档