2017-12-15 7 views
0

학업으로, 주어진 배열에서 이진 검색 트리를 만들고 그 위에 몇 가지 기능을 만들어야합니다. search() 함수가 작동하지 않고 이유를 모르겠다. True 또는 False 중 하나가 반환 되더라도 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

당신은 아마 방문 변수 I 시도 트리 –

+0

의 속성해야 할 수도 있지만, 어떻게 모르겠어요, 그래서로를 글로벌 –

+0

이동을 만든' 다른 것들처럼 __init__' –

답변

3

_search() 기능을 확인하십시오. 두 번째 또는 세 번째 테스트 케이스에서는 아무 것도 반환하지 않습니다. 파이썬에서 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

오, 그래, 그게 다야! 감사합니다. –

관련 문제