2

私はツリーを持っており、すべてのノードをループして値を与えたい ( score) :

  • leaves nodes:値は、ノード自体とその姉妹の属性に基づいて計算を行うことによって得られます (計算はリーフ ノードでのみ行うことができます)。
  • non leaf nodes:彼らは子からスコアを取得します。つまり、葉である子のスコアを比較して、最高のものを取得します。たとえば、ツリーのトラバーサルを理解できましたが、前述の条件に基づいてスコアに影響を与える方法がブロックされています。

入力ツリー:

((((a:1,((b:1,c:1)d:1,e:1)f:1)g:1,h:1,i:1)j:1,(k:1,l:1)m:1,(n:1,o:1,p:1)q:1)r:1)root;

横断コード:

def trav_tree(n): 
       
    if not n.is_leaf():
        trav_tree(n.get_children()[0])
    sisters=[]
    sisters=n.get_sisters()
    print n.name,
    for sis in sisters:
        if not sis.is_leaf():
            trav_tree(sis.get_children()[0])
        print sis.name,

    n=t.get_tree_root() 
    trav_tree(n)

出力:

a b c d e f g h i j k l m n o p q r root

私が正確にすべきことは、私がaに到着しときに計算することです。葉まで降り続ける姉妹を取得し、bとcのスコアを計算し、最高のスコアを取得してdに与えると、aのスコアを計算し、すぐ ...

これを解決する最善の方法は何ですか? ps:ツリー データ構造のpython ete2
に 取り組んでいます

よろしくお願いします

4

1 に答える 1