|  | @@ -0,0 +1,35 @@
 | 
	
		
			
				|  |  | +var max int = 0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Definition for a binary tree node.
 | 
	
		
			
				|  |  | + * type TreeNode struct {
 | 
	
		
			
				|  |  | + *     Val int
 | 
	
		
			
				|  |  | + *     Left *TreeNode
 | 
	
		
			
				|  |  | + *     Right *TreeNode
 | 
	
		
			
				|  |  | + * }
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +func findFrequentTreeSum(root *TreeNode) (res []int) {
 | 
	
		
			
				|  |  | +	max = 0
 | 
	
		
			
				|  |  | +	freq := make(map[int]int)
 | 
	
		
			
				|  |  | +	postorder(root, &freq)
 | 
	
		
			
				|  |  | +	for k, v := range freq {
 | 
	
		
			
				|  |  | +		if v == max {
 | 
	
		
			
				|  |  | +			res = append(res, k)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func postorder(root *TreeNode, freq *map[int]int) int {
 | 
	
		
			
				|  |  | +	if root == nil {
 | 
	
		
			
				|  |  | +		return 0
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	l := postorder(root.Left, freq)
 | 
	
		
			
				|  |  | +	r := postorder(root.Right, freq)
 | 
	
		
			
				|  |  | +	sum := l + r + root.Val
 | 
	
		
			
				|  |  | +	(*freq)[sum]++
 | 
	
		
			
				|  |  | +	if max < (*freq)[sum] {
 | 
	
		
			
				|  |  | +		max = (*freq)[sum]
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return sum
 | 
	
		
			
				|  |  | +}
 |