var cnt int = 1
var max int = 0
var pre int = 0
var ini bool = false

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func findMode(root *TreeNode) (res []int) {
	cnt, max, pre = 1, 0, 0 // Remember to init global variables at the beginning!
	ini = false
	if root == nil {
		return
	}
	inorder(root, &res)
	return
}

func inorder(root *TreeNode, res *[]int) {
	if root == nil {
		return
	} // Inorder traversal changes BST into increasing sequence.
	inorder(root.Left, res)
	if ini {
		if root.Val == pre {
			cnt++
		} else {
			cnt = 1
		}
	} else {
		ini = true
	}
	if max < cnt {
		*res = []int{root.Val}
		max = cnt
	} else if max == cnt {
		*res = append(*res, root.Val)
	}
	pre = root.Val
	inorder(root.Right, res)
}