2016-12-02 2 views
1

개체로 가득 찬 이진 검색 트리가 있습니다. 모든 객체의 속성을 전역 변수에 추가하는 콜백 함수를 사용하여 트리를 탐색합니다. 이 방법이 효과가 있지만 전역을 사용하지 않고이를 수행 할 방법을 찾고 싶습니다.콜백 함수를 사용하여 bst에서 값의 합계를 찾습니다 (전역 없음)

TOTAL_AGE = 0.0 

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


class Tree(object): 
    def __init__(self): 
     self.root = None 
     self.size = 0 

    def traverse(self, callback): 
     self._traverse(callback, self.root) 

    def _traverse(self, callback, node): 
     if node is None: 
      return 
     self._traverse(callback, node.left) 
     callback(node.data) 
     self._traverse(callback, node.right) 


def add_ages(tree): 
    tree.traverse(callback) 


def callback(student): 
    global TOTAL_AGE 
    TOTAL_AGE += student.age 


def main(): 
    tree = bst.Tree() 
    add_ages(tree) 
    print TOTAL_AGE 

이 내가 현재 이송 기능이 아닌 다른 구현을 사용해야 과제에 대해 인정 하듯이 있습니다 :

다음은 관련 코드입니다. 그것은 주로 내 문제이지만, 전역을 사용하거나 트래버스 (traverse)를 수정하지 않고이를 수행 할 방법이 없기 때문에.

미리 도움을 청하십시오.

답변

1

인스턴스의 상태를 추적 할 수 있도록 콜백으로 클래스 인스턴스의 방법을 전달할 수 다음 Tree에 그 callback 방법을 Count의 인스턴스를 다음

class Count(object): 
    def __init__(self): 
     self.total_age = 0 
    def callback(self, student): 
     self.total_age += student.age 

그리고 및 전달합니다

count = Count() 
tree.traverse(count.callback) 
+0

그럼에도 불구하고 나는 기대했던 것만 큼 우아하지는 않지만 그럼에도 불구하고 훌륭한 해결책입니다. 감사! – Grav