2017-01-05 16 views
0

我有一個多嵌套樹結構,我試圖找到提供的字符串/節點的當前級別。我使用遞歸遍歷節點並返回當前級別。突破多重嵌套樹python的遞歸

def dicq(self,value,current_level): 
    d = {} 
    for child in self.children: 
     if child.name == value: 
     print current_level 
     else: 
     (child.dicq(value,current_level+1)) 
    return current_level 


root.dicq('7.3',1) 

根是嵌套樹結構和我給它7.3和1(缺省電平意味着第一兒童)(其中我發現的水平的節點)。如果我只是在if語句中打印current_level,那麼它是正確的,但是如果我將返回放在if語句中,它不會返回。我想在找到該節點時立即返回當前級別。任何建議?

回答

2

現在,您的代碼正在返回current_level,無論您尋找的是哪個節點,都會找到或不是。 您需要做的是僅在找到匹配節點時才返回current_level。如果不是,則返回指示匹配節點未找到的內容。此外,您需要確保您的結果在遞歸級別上正確傳播,並且在找到匹配時停止進一步查看。

這裏是可能有幫助的代碼。注意:我沒有測試過它。

def dicq(self,value,current_level): 
    d = {} 
    retval = -1 
    for child in self.children: 
     if child.name == value: 
      retval = current_level 
     else: 
      retval = child.dicq(value,current_level+1) 
      if retval != -1: 
       break 
    return retval 

如果找到value,則返回該級別。如果不是,則返回-1,表示在樹的該部分中沒有找到它。

+0

是的謝謝你,我瘋了一個簡單的事情:( – Zeist