2013-04-05 3 views
1

Привет, ребята, поэтому у меня проблема, и это не так, что моя инструкция return не выполняется. Это мой код 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, код не работает обратное Истинное заявление даже несмотря на то , если выполняются оператор. Кто-нибудь знает, почему это? Спасибо заранее!

РЕДАКТОРА: ДОБАВЛЕН САМОГО ПАРАМЕТРА. ЭТО БЫЛО ПРЕДОТВРАТНО, БЫЛО ТАЙПО.

Я вставил числа 3, 8, 2 и 1 в дерево, а затем выполнил поиск 1. Я добавил инструкцию печати, если левый дочерний элемент None, а правый - None: if self.data == i: print ('self.data == i') return True Я добавил, что заявление печати при поиске 1 и заявление печати напечатали, что означает, что оператор if был выполнен, однако, return True statement не выполняется

+1

Если вы не предоставили прецедент, мы не можем сказать, в чем проблема. Моя склонность заключается в том, что либо 'i', либо' self.data' - это не то, что вы думаете, так что ваш условный объект оценивается как «ложный», если вы этого не думаете. Попробуйте сделать это 'pass'' return False' и посмотреть, что вы получите. –

+1

Просьба предоставить [SSCCE] (http://sscce.org) –

+0

Хм нет, я вставил числа 3, 8, 2 и 1 в дерево, а затем искал 1. Я добавил заявление о печати , если левый ребенок is None и right child is None: if self.data == i: print ('self.data == i') return True Я добавил, что заявление о печати при поиске 1 и заявлении на печать напечатали, что означает, что оператор if был выполнен , однако возвращаемый оператор True не выполняется. –

ответ

1

Я предполагаю, что вы пытаетесь выполнить двоичный поиск, и в этом случае у вас есть некоторые проблемы в вашем коде. Оператор return, вероятно, не выполняется, поскольку условие 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

К сожалению, это должно было быть там. Это была опечатка. Не работает, даже если у меня есть –

+0

Я вижу, изменен, чтобы показать полную реализацию с нуля. –

+0

Hm no, я вставил числа 3, 8, 2 и 1 в дерево, а затем искал 1. Я добавил инструкцию печати, если левый дочерний элемент None и правый дочерний элемент None: if self.data == i: print ('self.data == i') return True Я добавил, что заявление печати при поиске 1 и заявление печати напечатали, что означает, что оператор if выполнен, однако оператор return True не выполняет –

Смежные вопросы