[英]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.