2013-04-05 190 views
1

嘿傢伙,所以我有一個問題,這是我的返回語句不執行。 這是我的sudo代碼。它搜索一棵樹來查看一個項目是否在樹中。返回語句不執行

def search(self, i): 
    if left child is None and right child is None 
     if self.data == i: 
      return True 
     else: 
      pass 
    elif self.data == i: 
     return True 
    else: 
     if left child exists: 
      return self.left.search(i) 
     if right child exists: 
      return self.right.search(i) 

代碼似乎除了當self.data == i,代碼不運行,即使 如果執行語句返回TRUE語句來工作。有人知道爲什麼嗎? 在此先感謝!

編輯:增加了自我參數。它支持在那裏,是一個TYPO ..

我插入數字3,8,2和1到樹中,然後搜索1.我添加了一個打印語句,如果離開的孩子是None,右邊的孩子是None:如果self.data == i:print('self.data == i')return True我在搜索1時添加了print語句,並且print語句打印出來,這意味着if語句被執行,但是, return True語句不執行

+1

除非你提供一個用例,否則我們不能說出你的問題是什麼。我的傾向是,無論是「i」還是「self.data」都不是你認爲的那樣,所以當你不這麼認爲時,你的條件就是評估爲「假」。嘗試使'傳遞''返回False',而不是看你得到什麼。 – 2013-04-05 04:05:16

+1

請提供一個[SSCCE](http://sscce.org) – 2013-04-05 04:09:17

+0

嗯不,我插入數字3,8,2和1到樹中,然後搜索1. 如果離開孩子,我添加了打印語句 是None並且右邊的子項是None: if self.data == i: print('self.data == i') return True 我在搜索1時添加了print語句,並且print語句打印出了意味着if語句執行了 ,但是,返回True語句不執行。 – 2013-04-05 04:14:29

回答

1

我想你正在嘗試做二進制搜索,在這種情況下,你的代碼中有一些問題。返回語句可能未執行,因爲條件self.data == i失敗。另外請注意,如果根目錄有一個左邊的孩子,那麼正確的孩子永遠不會看到你的原始代碼。

這是一個線性搜索的實現,我將其作爲練習將其修改爲二分查找。

def search(self, i): 
    if self.data == i: 
     return True 

    if self.left is not None: 
     if self.left.search(i): 
      return True 
    if self.right is not None: 
     return self.right.search(i) 
    return False 
+0

對不起,它應該在那裏。這是一個錯字。即使我擁有它也不起作用 – 2013-04-05 04:07:19

+0

我看到,修改爲從頭開始顯示完整的實現。 – 2013-04-05 04:24:21

+0

嗯不,我插入數字3,8,2和1到樹中,然後搜索1.我添加了一個打印語句,如果離開的孩子是None並且右邊的孩子是None:if self.data == i:print( 'self.data == i')return True我在搜索1時添加了print語句,並且print語句打印出來,這意味着if語句被執行,但是返回True語句不會執行 – 2013-04-05 04:26:43