簡體   English   中英

在樹中尋找節點

[英]Finding a node in a tree

我無法在具有任意分支因子的樹中找到節點。 每個節點都承載數據,並具有零個或多個子代。 搜索方法位於Node類內部,並檢查該Node是否攜帶數據,然后檢查所有該Node的所有子節點。 我在遞歸方法中一直以無限循環結尾,有什么幫助嗎?

def find(self, x):

    _level = [self]
    _nextlevel = []

    if _level == []: 
        return None
    else:
        for node in _level:
            if node.data is x:
                return node
            _nextlevel += node.children
        _level = _nextlevel
    return self.find(x) + _level

find方法位於Node類中,並檢查數據x是否在調用該方法的節點中,然后檢查所有這些節點的子節點。 我不斷陷入無限循環,在這一點上,我真的很困惑,不勝感激。

此代碼存在一些問題。 首先,請注意在第2行上,您具有_level = [self] 這意味着第5行的if _level == []將始終為false。

第二個問題是您的for循環遍歷_level所有內容,但是如上所述,由於第2行,它始終是[self]

第三個問題是return語句。 您已return self.find(x) + _level 分為2部分進行評估。 首先,調用self.find(x) ,然后將返回的內容與_level的內容連接起來。 但是,當您調用self.find(x) ,它將使用相同的參數調用相同的方法,然后依次擊中相同的return self.find(x) + _level行,這將再次調用相同的方法,並且永遠持續下去。

遞歸搜索的一種簡單模式是使用生成器。 這樣就很容易傳遞調用代碼的答案,而無需自己管理遞歸的狀態。

class Example(object):
     def __init__(self, datum,  *children):
         self.Children = list(children) # < assumed to be of the same or duck-similar class
         self.Datum = datum

     def GetChildren(self):
         for item in self.Children: 
             for subitem in item.GetChildren():
                 yield subitem
             yield item

     def FindInChildren(self, query):  # where query is an expression that is true for desired data
         for item in self.GetChildren():
             if query(item):
                yield item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM