2015-10-27 50 views
-1

所以(這是關於搜索方法),該方法是遞歸的,但是當我嘗試返回self.key和self.value時,函數返回一個NoneType,我該如何解決這個問題?Python Recusrive方法返回NoneType

(還有更多的類,但這是相關的部分,代碼的其他部分沒有任何影響的這一部分)

我見過,你必須返回整個方法(其它解決方案在我而言,這將是:返回搜索(自我,鍵)),但這些只是給我一個無限循環

class BinairySearchTree: 

def __init__(self, key=None, value=None, lefttree=None, righttree=None): 
    self.key = key 
    self.value = value 
    self.lefttree = lefttree 
    self.righttree = righttree 

def insert(self, key, value): 
    if self.key != None: 
     if key > self.key: 
      if self.righttree != None: 
       self.righttree.insert(key, value) 
      else: 
       self.righttree = BinaireZoekBoom(key, value) 
     elif key == self.key: 
      self.key = key 
      self.value = value 
     elif key < self.key: 
      if self.lefttree != None: 
       self.lefttree.insert(key, value) 
      else: 
       self.lefttree = BinaireZoekBoom(key, value) 
    elif self.key == None: 
     self.key = key 
     self.value = value 

def search(self, key): 
    if key > self.key: 
     self.righttree.search(key) 
    elif key == self.key: 
     return self.key, self.value 
    elif key < self.key: 
     self.lefttree.search(key) 
+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [MCVE](http://stackoverflow.com/help/mcve)適用於此處。如果沒有缺少方法BinaireZoekBoom和一個簡單的測試用例,我們不能重現這一點。我看到各種非耐用的代碼,但我不打算通過桌面檢查來調試。 – Prune

回答

0

我想我剛纔看到的問題:你的搜索功能不會傳播找到節點了樹。您必須在每個級別返回一個值才能將結果返回給原始調用方。

def search(self, key): 
    if key > self.key: 
     return self.righttree.search(key) 
    elif key == self.key: 
     return self.key, self.value 
    elif key < self.key: 
     return self.lefttree.search(key)