题目地址
https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/
题目描述
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
- 结点左子树中所含结点的值小于等于当前结点的值
- 结点右子树中所含结点的值大于等于当前结点的值
- 左子树和右子树都是二叉搜索树
思路
二叉搜索树的中序序列是有序的,利用中序遍历可将问题转化为求有序数组中的众数。
代码
// 注意last, n, maxn要设为指针
#define MIN 0x80000000
void fMode(struct TreeNode* root, int *res, int* last, int *n, int *maxn, int *returnSize) {
if(root) {
fMode(root->left, res, last, n, maxn, returnSize);
if((*last) != root->val) {
(*n) = 0;
}
(*n)++;
if((*n) > (*maxn)) {
(*maxn) = (*n);
(*returnSize) = 0;
res[*returnSize] = root->val;
(*returnSize)++;
}
else if((*n) == (*maxn)) {
res[*returnSize] = root->val;
(*returnSize)++;
}
(*last) = root->val;
fMode(root->right, res, last, n, maxn, returnSize);
}
}
int* findMode(struct TreeNode* root, int* returnSize){
int n = 0;
int last = 0;
int maxn = MIN;
*returnSize = 0;
int *res = (int *)malloc(sizeof(int)*10240);
fMode(root, res, &last, &n, &maxn, returnSize);
return res;
}