ツリーのような構造(クラス:Scan_instance_tree)を設定するアルゴリズムがありますが、残念ながら、各呼び出し中に、ルートノードの子と、ツリーのさらに下に作成された新しい子ノードに誤って追加されます。
手がかりとして、私は別のスレッドを見ました...
...この問題について簡単に説明し、渡されたパラメータは変更可能である必要があることが示唆されました。それが答えであり、この例では、これをどのように行うのでしょうか?
これが私の現在のコードです:
class Field_node(object):
field_phenotype_id = -1
field_name = ''
field_parent_id = -1
child_nodes = []
class Scan_instance_tree(object):
root_node = None
def __init__(self, a_db):
self.root_node = Field_node()
scan_field_values = self.create_scan_field_values(a_db) # This just creates a temporary user-friendly version of a database table
self.build_tree(scan_field_values)
def build_tree(self, a_scan_field_values):
self.root_node.field_name = 'ROOT'
self.add_child_nodes(a_scan_field_values, self.root_node)
def add_child_nodes(self, a_scan_field_values, a_parent_node):
i = 0
while i < len(a_scan_field_values):
if a_scan_field_values[i]['field_parent_dependancy'] == a_parent_node.field_phenotype_id:
#highest_level_children.append(a_scan_field_values.pop(a_scan_field_values.index(scan_field)))
child_node = Field_node()
child_node.field_phenotype_id = a_scan_field_values[i]['field_phenotype_id']
child_node.field_name = a_scan_field_values[i]['field_name']
child_node.field_parent_dependancy = a_scan_field_values[i]['field_parent_dependancy']
a_parent_node.child_nodes.append(child_node)
a_scan_field_values.remove(a_scan_field_values[i])
# RECURSION: get the child nodes
self.add_child_nodes(a_scan_field_values, child_node)
else:
i = i+1
self.add_child_nodes(...)への再帰呼び出しを削除すると、ルートの子が正しく追加されます。つまり、field_parent_dependancy = -1のノードのみで構成されます。再帰呼び出しを許可すると、ルートの子にはすべてのノードが含まれます。 、field_parent_dependancy値に関係なく。
よろしくお願いします
アン