2017-12-15 21 views
0

学業として、私は与えられた配列からバイナリ検索ツリーを構築し、その上にいくつかの関数を作成しなければなりません。 またはFalseのいずれかが返されるにもかかわらず、search()関数が機能せず、理由がわからない、Noneを返し続けます。 ビルド関数でコードにエラーが発生する可能性がありますが、アップロードシステムによって書き込みが成功してツリーが構築されます。なぜ検索関数が返されないのですか?

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

かもしれないあなたは、おそらく私が試した木 –

+0

の訪問変数プロパティを作成する必要がありますが、私は方法がわからないので、私は 'にそれにそれをグローバル –

+0

移動をしました他のもののように__init__' –

答えて

3

_search()の機能を確認してください。 2番目または3番目のテストケースでは何も返されません。 Pythonでreturnを明示的に定義していない場合、このメソッドはNoneを返します。

修正が

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

ああ、そうです!ありがとうございます。 –

関連する問題