我有一个如下定义的节点数据结构,并且不确定find_matching_node方法是pythonic还是有效的。我不熟悉发电机,但认为可能有更好的解决方案使用它们。有什么想法吗?
class HierarchyNode():
def __init__(self, nodeId):
self.nodeId = nodeId
self.children = {} # opted for dictionary to help reduce lookup time
def addOrGetChild(self, childNode):
return self.children.setdefault(childNode.nodeId,childNode)
def find_matching_node(self, node):
'''
look for the node in the immediate children of the current node.
if not found recursively look for it in the children nodes until
gone through all nodes
'''
matching_node = self.children.get(node.nodeId)
if matching_node:
return matching_node
else:
for child in self.children.itervalues():
matching_node = child.find_matching_node(node)
if matching_node:
return matching_node
return None
答案 0 :(得分:0)
根据树上需要的其他操作以及需要多长时间执行此递归,您可以将所有后代节点存储在节点上的字典中,因此整个递归函数可以是单个字典外观起来。
答案 1 :(得分:0)
FWIW,您可能最好使用可重复使用的树数据结构,而不是重新发明轮子。我在CPython上看到的最好的,取决于运行时和工作负载,在这里描述: http://stromberg.dnsalias.org/~strombrg/python-tree-and-heap-comparison/
...但总之,我看到的最好的是展开树,AVL树和treap。