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

這是無可否認的轉讓,這就要求我使用當前的橫移功能,而不是不同的實現。這主要是我的問題,但因爲我沒有看到不使用全局或修改遍歷()的方法。

在此先感謝您的幫助。

回答

1

你可以通過一個類的實例作爲回調的方法,這樣就可以保持跟蹤狀態的實例:

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

然後實例Count,並通過其callback方法將Tree

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

不像我期望的那麼優雅,但是卻是一個很好的解決方案。謝謝! – Grav