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) }