def searchBST(self, cur, freq_map):if cur is None:returnfreq_map[cur.val] += 1 # 统计元素频率self.searchBST(cur.left, freq_map)self.searchBST(cur.right, freq_map)def findMode(self, root):freq_map = defaultdict(int) # key:元素,value:出现频率result = []if root is None:return resultself.searchBST(root, freq_map)max_freq = max(freq_map.values())for key, freq in freq_map.items():if freq == max_freq:result.append(key)return result
以上代码中,freq_map
通过调用函数findMode
之后再返回之后被修改了!原因如下:
freq_map
是在 findMode
方法中定义的局部变量,但它被作为参数传递给 searchBST
方法,所以 searchBST
方法可以访问和修改它。这种传递方式允许 searchBST
方法在递归调用中保持对同一个字典的引用,从而累积BST中元素的频率。
在Python中,变量(包括函数参数)是对象的引用,而不是对象本身。当你将一
个对象(如字典、列表或其他可变对象)作为参数传递给一个函数时,你实际上是在传递对该对象的引用的副本。这意味着函数内部对该对象的任何修改都会反映到原始对象上,因为函数和调用者都持有对同一个对象的引用。