Algorithm 用树算法对叶子进行计算并得到根的值,python
我有一个树,我想在所有节点上循环,给它们一个值(Algorithm 用树算法对叶子进行计算并得到根的值,python,algorithm,python-2.7,data-structures,recursion,tree,Algorithm,Python 2.7,Data Structures,Recursion,Tree,我有一个树,我想在所有节点上循环,给它们一个值(score): leaves节点:根据节点本身及其姐妹的属性进行计算得出该值(只能对leaves节点进行计算) 非叶节点:它们从子节点获取分数,例如,比较属于叶的子节点的分数,并获得最高的分数 我可以计算出树的遍历,但我有点不知道如何根据前面列出的条件影响分数 输入树: ((((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; d
score
):
根据节点本身及其姐妹的属性进行计算得出该值(只能对leaves节点进行计算)leaves节点:
它们从子节点获取分数,例如,比较属于叶的子节点的分数,并获得最高的分数 我可以计算出树的遍历,但我有点不知道如何根据前面列出的条件影响分数非叶节点:
((((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: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: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的树数据结构
非常感谢您只需添加一个属性字段来表示每个无叶节点的子节点的最高分数
然后执行根后遍历。我不明白这如何有助于先初始化叶子,然后再获取值?