2

Ich bin auf der Rekursion in binärer Suchbaum Transversalen verwirrt, ich bin gerade verloren, da ich eine Liste am Ende zurückkommen müssen und nicht bekommen, wie die values.It wie dies fügt Werte speichern denn ich glaube nicht, ich bin bewegt richtig hier durch den Baum ist, nicht sicher, ob mein Code unten gezeigt und ich habe nicht, welche Daten stype verwendet wird, um die Werte so speichern auch wenn mein Unittest korrekt ist entwederbinärer Suchbaum Transversalen

def inorder(self): 

    print("IN INORDER_______________________________") 
    print("Printing self.value" + str(self.__value)) 
    result = [] 

    if self.__left: 
     print("theres self.left") 
     print(self.__value) 
     #result = result + self.__left 
     #print(result) 
     return self.__left.inorder() 
     result 
     print(result + "RESULTS") 

    if self.__right: 

     print("theres self.right") 
     print(self.__value) 
     return self.__right.inorder() 

    return result 



def test_inorder(self): 
    bt = family_tree() 
    bt.add(15, "jim") 
    bt.add(20, "jamie") 
    bt.add(25, "fred") 
    bt.add(35, "howard") 
    bt.add(30, "kc") 
    x = bt.inorder() 

    expected = '''(15, 'jim'),(20, 'jamie'),(25, 'fred'),(30, 'howard'),(35, 'kc')''' 
    self.assertEquals(str(x), expected) 
    t = family_tree(bt) 
    self.assertEquals(str(t), expected) 
+0

Ich denke, es einige Fehler in Ihrer 'inorder' Methode. Der Code, der sich nach der return-Anweisung befindet (z. B. in einer Verzweigung wie "if self .__ right"), wird nie ausgeführt. Wenn Sie die print-Anweisung ausschließen, könnte Ihre Funktion auf etwas wie "def inorder (self)" reduziert werden: wenn self .__ left: return self .__ left.inorder() elif self .__ rechts: return self .__ right.inorder() else: return [] '' 'keine genaue Antwort, aber Sie ein anderes Attribut verwenden können (wir say'self.result') des Objekts den Wert, den Sie auf jeder Rekursion speichern müssen hinzuzufügen, bis Sie fertig sind und Rückkehr es. – mgc

Antwort

3

Es gibt ein Problem in Ihrer inorder Implementierung ist; Sie geben die Werte zurück, anstatt sie miteinander zu verbinden.

meine Implementierung Hier wird auf dem Code basiert:

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

    result.append(self.__value) 

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

    return result