int* answer;
int answerSize;
int base, count, maxCount;
void update(int x) {
if (x == base) {
++count;
} else {
count = 1;
base = x;
}
if (count == maxCount) {
answer[answerSize++] = base;
}
if (count > maxCount) {
maxCount = count;
answerSize = 0;
answer[answerSize++] = base;
}
}
void dfs(struct TreeNode* o) {
if (!o) {
return;
}
dfs(o->left);
update(o->val);
dfs(o->right);
}
int* findMode(struct TreeNode* root, int* returnSize) {
base = count = maxCount = 0;
answer = malloc(sizeof(int) * 4001);
answerSize = 0;
dfs(root);
*returnSize = answerSize;
return answer;
}