gpt4 book ai didi

algorithm - python ete2 二叉树获取后代值之和

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:47 25 4
gpt4 key购买 nike

我有一个 b*二叉树* 其中只有叶子有字符串值 (a,b,c,d,e)我想 c*连接这些叶子的值并将其传递给它们的祖先*

        0
/ \
2 3
/ \ / \
1 a d e
/ \
b c

例如。

1->value=bc 2->value=abc  3->value=de  

在 python 中执行此操作的最佳方法是什么 ete2 tree class

提前致谢

最佳答案

一个非常标准的过程是使用后序迭代。此外,ETE还实现了 get_cached_content 函数,该函数有助于进行此类计算。

from ete2 import Tree
t = Tree("(((b,c), a), (d,e));")

print "Method 1: caching node content"
internal_node_content = t.get_cached_content(store_attr="name")
for node, content in internal_node_content.iteritems():
if not node.is_leaf():
print node, "\nConcat:", ''.join(content)


print "Method 2: post order iteration"
node2concat = {}
for node in t.traverse("postorder"):
if not node.is_leaf():
concat = ''.join([node2concat[ch] for ch in node.children])
node2concat[node] = concat
print node, "\nConcat:", concat
else:
node2concat[node] = node.name


#Method 1: caching node content
#
# /-b
# /-|
# /-| \-c
# | |
#--| \-a
# |
# | /-d
# \-|
# \-e
#Concat: acbed
#
# /-b
#--|
# \-c
#Concat: cb
#
# /-b
# /-|
#--| \-c
# |
# \-a
#Concat: acb
#
# /-d
#--|
# \-e
#Concat: ed
#Method 2: post order iteration
#
# /-b
#--|
# \-c
#Concat: bc
#
# /-b
# /-|
#--| \-c
# |
# \-a
#Concat: bca
#
# /-d
#--|
# \-e
#Concat: de
#
# /-b
# /-|
# /-| \-c
# | |
#--| \-a
# |
# | /-d
# \-|
# \-e
#Concat: bcade

关于algorithm - python ete2 二叉树获取后代值之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18317932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com