各ノードがN個の子を持つことができるが、親は1つしかないツリーが与えられる。どのようにして1つのノードの祖先を得ることができますか?たとえば、のは、私はこの木を得たとしましょう:特定のノードからツリー祖先のリストを取得するにはどうすればよいですか?
# Operator
# ... FooOperator
# ...... BOperator
# ......... B1Operator
# ............ B11Operator
# ...... AOperator
# ......... A2Operator
# ......... A1Operator
# ......... A3Operator
# ...... COperator
# ......... C1Operator
# ......... C2Operator
# ............ C21Operator
tree = {
'children': [{
'children': [{
'children': [{
'children': [{
'children': [],
'class': 'B11Operator',
'parent': 'B1Operator'
}],
'class': 'B1Operator',
'parent': 'BOperator'
}],
'class': 'BOperator',
'parent': 'FooOperator'
},{
'children': [{
'children': [],
'class': 'A2Operator',
'parent': 'AOperator'
},{
'children': [],
'class': 'A1Operator',
'parent': 'AOperator'
},{
'children': [],
'class': 'A3Operator',
'parent': 'AOperator'
}],
'class': 'AOperator',
'parent': 'FooOperator'},{
'children': [{
'children': [],
'class': 'C1Operator',
'parent': 'COperator'
},{
'children': [{
'children': [],
'class': 'C21Operator',
'parent': 'C2Operator'
}],
'class': 'C2Operator',
'parent': 'COperator'
}],
'class': 'COperator',
'parent': 'FooOperator'
}],
'class': 'FooOperator',
'parent': 'Operator'
}],
'class': 'Operator',
'parent': None
}
def display_tree(node, indent=0):
print('.' * indent, node['class'])
indent += 3
for child in node['children']:
display_tree(child, indent)
display_tree(tree)
どのようにして、このような結果は["Operator", "FooOperator", "COperator", "C2Operator", "C21Operator"]
たよう"C21Operator"
から先祖リストを取得するのでしょうか?あなたのデータ構造を考えると
あなたは何を試しましたか、それにどのような問題がありますか? – jonrsharpe
この種のデータ構造を使って、私はそれが本当に可能になるとは思わない。まあ、おそらく 'tree'で始まるすべての可能な道を歩み、あなたを' 'C210Operator ''に導くパスを返すならば。しかし、おそらく 'parent'属性を持つ独自の' Node'クラスを実装して、親チェーンを歩いているだけでしょうか? –
+1に@ juanpa.arrivillagaがこの問題に適したより良いデータ構造を実装するカスタムクラスを提案します。 –