Python—有没有更好/更有效的方法来查找树中的节点?

Python—有没有更好/更有效的方法来查找树中的节点?,python,tree,find,traversal,Python,Tree,Find,Traversal,我有如下定义的节点数据结构,不确定find_matching_node方法是pythonic还是有效的。我不太熟悉发电机,但认为使用它们可能会有更好的解决方案。有什么想法吗 class HierarchyNode(): def __init__(self, nodeId): self.nodeId = nodeId self.children = {} # opted for dictionary to help reduce lookup time

我有如下定义的节点数据结构,不确定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

根据需要在树上执行的其他操作,以及执行此递归的频率,可以将所有子代节点存储在节点上的字典中,这样整个递归函数就可以是单个字典查找。

FWIW,最好使用可重用的树数据结构,而不是重新发明轮子。根据运行时和工作负载的不同,我所看到的CPython的最佳性能如下所述:


…但简而言之,我看到的最好的是splay树、AVL树和treap。

这种递归不会经常调用,因为树只有两个级别,有更多的叶节点。此外,当您说“将所有子代节点存储在字典中”时,您指的是直接子代还是所有子代。我已经将直系子代存储在字典中,而字典又可以拥有自己的直系子代字典。我需要维护每个子级的层次结构。希望我能解释清楚。如果你不经常深入研究,我的建议就不好了。我的意思是,除了直接子项字典之外,还可以存储深层子项的dict,本质上是递归搜索的缓存。谢谢。如果你不介意的话,如果必须经常进行深入的搜索,你能提供你的建议吗?如果将来有什么变化,这可能会有帮助。