1

クラス NodeTree があるので、アドバイスをお願いします。次に、関数 create_T (d) があります。この関数は、ツリーを表す辞書 d を入力として受け取り、NodeTree タイプのノードを持つツリーを作成します。ありがとうございます

4

1 に答える 1

0

あなたの情報はかなり乏しいので、私はいくつかの仮定を立てました。基本的に、ツリーのどこから始めるべきかを知る必要があると思います。ランダムなポイントを選択すると、上向きと下向きに作業する必要があります。ツリーの一番上がどれであるかがわかれば、下に向かって作業するだけです。どのノードが他のノードの子ではないかを確認するためにセット比較を行うことで、ツリーのトップを計算しました。

import itertools

# NodeTree
class Node(object):
    def __init__(self, name):
        self.name = name
        self.children = []

    def add_child(self, child_node):
        self.children.append(child_node)

    def __repr__(self):
        if not self.children:
            return '<%s/>' % self.name
        else:
            children = ''.join([repr(child) for child in self.children])
            return '<%s>%s</%s>' % (self.name, children, self.name)

# create_T(d)
def create_tree(tree_dict):
    # find which node is the top of the tree (assume it is well-formed)
    all_leaves = set(itertools.chain(*tree_dict.values()))
    top_of_the_tree = set(tree_dict.keys()) - all_leaves

    def get_node(name):
        node = Node(name)
        for child_name in tree_dict[name]:
            node.add_child(get_node(child_name))
        return node
    return get_node(top_of_the_tree.pop())

print create_tree({'a': ['b', 'c'],
                   'b': ['d'],
                   'c': ['e'],
                   'd': [],
                   'e': [],
                   'f': ['a']})

与える:

   <f><a><b><d/></b><c><e/></c></a></f>
于 2012-11-27T01:23:44.170 に答える