
解题思路:递归解决
递归结束条件:传入结点为空结点
struct TreeNode* pre;
int count;
int maxCount;
void searchBST(struct TreeNode* node, int* returnSize, int* ret) {
if(!node)
return ;
searchBST(node->left, returnSize, ret);
//pre为NULL时证明node为根节点
if(pre == NULL) {
count = 1;
}
//当pre的值和node的值一样时,让count++
else if(pre->val == node->val) {
count++;
}
//最后一种情况为pre和node的值不一样,这时候我们的count需要为1
else {
count = 1;
}
pre = node;
//如果当前值的count值和最大count值一样,我们将值压入数组
if(count == maxCount) {
ret[(*returnSize)++] = node->val;
}
//如果发现了count比当前最大count值更大的情况,将maxCount更新。然后将数组清空。将最新元素压入数组
else if(count > maxCount) {
maxCount = count;
*returnSize = 0;
ret[(*returnSize)++] = node->val;
}
searchBST(node->right, returnSize, ret);
return;
}
int* findMode(struct TreeNode* root, int* returnSize){
*returnSize = 0;
count = 0;
maxCount = 0;
pre = NULL;
int* ret = (int*)malloc(sizeof(int) * 10240);
searchBST(root, returnSize, ret);
return ret;
}
