2016-05-08 8 views
2

Пожалуйста, помогите; Я не думаю, что я правильно обхожу его, и его возвращение пустым, когда ему нужно вернуть новый список. Я застрял какое-то время и все еще должен делать все другие обходы. Будет обеспечивать единичный тест для необходимого выхода, но мой модульный тест может быть неправильным.Двоичное дерево inorder transversal

def inorder(self): 

    print("in INOrDER is entered") 
    temp = [None] 


    if self.__left: 
     temp = temp.append(self.__left) 
     return self.__left.inorder() 
    elif self.__right: 
     temp = temp.append(self.__right) 
     return self.__right.inorder() 
    return temp 


def test_inorder(self): 
    bt = family_tree() 
    bt.add(20, "melanie") 
    bt.add(10, "edwin") 
    bt.add(30, "junior") 
    bt.add(25, "dora") 
    bt.add(35, "kate") 
    x = bt.inorder() 

    expected = '''(10, 'edwin'),(20, 'melanie'),(25, 'dora'),(30, 'junior'),(35, 'kate')''' 
    self.assertEquals(str(x), expected) 
    t = family_tree(bt) 
    self.assertEquals(str(t), expected) 
+4

Возможный дубликат [бинарное дерево поиска трансверсалями] (http://stackoverflow.com/questions/37087182/binary-search-tree-transversals) – Gal

ответ

4

Есть 2 проблемы в вашей реализации:

temp = [None] 

Данное заявление создает список с None пункта:

x = len(temp) # x value will be 1 

Вторая проблема заключается в ваш метод добавления логики; вы возвращаете значения вместо их добавления.

Вот базовая реализация на код:

def inorder(self): 
    result = [] 
    if self.__left: 
     result += self.__left.inorder() 

    result.append(self.__value) 

    if self.__right: 
     result += self.__right.inorder() 

    return result 
0

Обход в порядке необходимости должен опускаться в оба поддерева, если он присутствует, и посещать корень между ними; ваш код возвращается после прохождения поддерева, пропуская через другое поддерево и корень.

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