2016-12-02 3 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 

はここに関連するコードです。これは主に私の問題ですが、グローバルを使用せずにトラバースを変更する方法もありません()。

ご協力いただきありがとうございます。その後、

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

そしてCountをインスタンス化し、Treeにそのcallbackメソッドを渡します:あなたは、インスタンスに状態を追跡できるように、コールバックとしてクラスインスタンスのメソッドを渡すことができ

答えて

1

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

私が望んでいたほど優雅ではありませんが、それにもかかわらず素晴らしい解決策です。ありがとう! – Grav

関連する問題