私は二分木を持っています:
root
/ \
g h
/ \ / \
d a e f
/ \
b c
各ノードには、各ノードのDNAシーケンスを保存する「seq」機能があります('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 関数がまだないため、テストできません。
デフォルトは影響する_スコア(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
私が書くことを考えているかどうかを教えてくれる人はいますか?ツリーデータ構造と再帰を扱うのは初めてであることに注意してください。