我请教你我有一个类 NodeTree。然后我有一个函数 create_T (d) 这个函数将代表树的字典 d 作为输入,并创建一个节点类型为 NodeTree 的树 你建议我做什么?谢谢大家
问问题
767 次
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 回答