2014-12-07 271 views
2

我已經實現了一個簡單的樹,我有這個問題。當我嘗試搜索節點並且它存在時,它將返回無,即使它在查找方法中的if語句處運行打印。當我查找根節點時,它運行正常。所有其餘節點都返回None。有人能解釋爲什麼嗎?Python二叉樹

class Node(): 
    def __init__(self,data): 
     self.right = None 
     self.left = None 
     self.data = data 

    def insert(self,data): 
     if self.data == data: 
      print "this item exists" 
     elif self.data > data: 
      if self.left == None: 
       self.left = Node(data) 
      else: 
       self.left.insert(data) 
     else: 
      if self.right == None: 
       self.right = Node(data) 
      else: 
       self.right.insert(data) 

    def print_nodes(self): 
     if self.left: 
      self.left.print_nodes() 
     print self.data 
     if self.right: 
      self.right.print_nodes() 

    def lookup(self,data): 
     if self.data == data: 
      print 'exists' 
      return 1 
     elif self.data > data: 
      if self.left != None: 
       self.left.lookup(data) 
      else: 
       return -1 
     elif self.data < data: 
      if self.right != None: 
       self.right.lookup(data) 
      else: 
       return -1 


    def delete(self,data): 
     if self.lookup(data)== -1: 
      print "doesnot exists" 
     else: 
      if (not self.left) and (not self.right): 
       self.data = None 

root = Node(5) 
#root.insert(3) 
root.insert(3) 
root.insert(2) 
root.insert(6) 
root.insert(61) 
root.insert(62) 
root.insert(63) 

x = root.lookup(3) 
print x 
+1

您不會從遞歸調用中返回查找結果。 – walkytalky 2014-12-07 13:20:21

回答

3

當項目是不是在根目錄中,你打電話給其兒子lookup()功能,而無需返回自己的價值,所以即使代碼某處發現在樹中的數據,你得到的結果None值,而不是(1/-1

替換此行:與線

self.left.lookup(data) 
... 
self.right.lookup(data) 

return self.left.lookup(data) 
... 
return self.right.lookup(data) 
+0

該死的我是一個白癡...謝謝 – 2014-12-07 13:24:26