2017-12-15 10 views
0

Als Schularbeiten muss ich einen binären Suchbaum aus dem gegebenen Array erstellen und ein paar Funktionen darauf setzen. Die search() Funktion funktioniert nicht und ich weiß nicht warum, es wird immer None zurückgegeben, obwohl es entweder True oder False zurückgegeben werden soll. Möglicherweise gibt es einen Fehler in meinem Code beim Erstellen von Funktionen, aber das Upload-System schreibt, dass es erfolgreich einen Baum erstellt.Warum Suchfunktion zurückgibt Keine?

visited = 0 

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


class BinarySearchTree: 
    def __init__(self): 
     self.root = None 

    def insert(self, value): 
     if self.root is None: 
      self.root = Node(value) 
     else: 
      self._insert(value, self.root) 

    def _insert(self, value, curNode): 
     if value < curNode.data: 
      if curNode.left is None: 
       curNode.left = Node(value) 
      else: 
       self._insert(value, curNode.left) 
     else: 
      if curNode.right is None: 
       curNode.right = Node(value) 
      else: 
       self._insert(value, curNode.right) 

    def fromArray(self, array): 
     for i in range(len(array) - 1): 
      value = array[i] 
      self.insert(value) 
      i += 1 

    def search(self, value): 
     global visited 
     if self.root.data is None: 
      visited += 1 
      return False 
     else: 
      return self._search(value, self.root) 

    def _search(self, value, curNode): 
     global visited 
     if value == curNode.data: 
      visited += 1 
      return True 
     elif value < curNode.data and curNode.left is not None: 
      self._search(value, curNode.left) 
     elif value > curNode.data and curNode.right is not None: 
      self._search(value, curNode.right) 
     else: 
      return False 

    def min(self): 
     global visited 
     curNode = self.root 
     while curNode.left is not None: 
      visited += 1 
      curNode = curNode.left 
     return curNode 

    def max(self): 
     global visited 
     curNode = self.root 
     while curNode.right is not None: 
      visited += 1 
      curNode = curNode.right 
     return curNode 

    def visitedNodes(self): 
     return visited 
+0

Sie wahrscheinlich die besuchten Variable eine Eigenschaft des Baumes –

+0

Ich habe versucht, machen sollte, aber ich weiß nicht, wie, so habe ich es ein globales –

+0

verschiebe es in die ' __init__' wie die anderen –

Antwort

3

Überprüfen Sie Ihre _search() Funktion. Es gibt im zweiten oder dritten Testfall nichts zurück. Wenn Sie in Python return nicht explizit definieren, gibt die Methode None zurück.

könnte ein Update

sein
def _search(self, value, curNode): 
    global visited 
    if value == curNode.data: 
     visited += 1 
     return True 
    elif value < curNode.data and curNode.left is not None: 
     return self._search(value, curNode.left) 
    elif value > curNode.data and curNode.right is not None: 
     return self._search(value, curNode.right) 
    else: 
     return False 
+0

Oh ja, das war's! Danke mein Herr. –

Verwandte Themen