27_二叉搜索树的众数
201.二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2]
输出:[2]
示例 2:
输入:root = [0]
输出:[0]
class Solution {
private int count = 0;//当前节点的频次
private int maxCount = 0;//二叉树的整个节点的频次
List<Integer> result;
TreeNode pre = null;
public int[] findMode(TreeNode root) {
findMode1(root);
int[] res = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
res[i] = result.get(i);
}
return res;
}
//中序遍历(左-中-右)
public void findMode1(TreeNode cur) {
if (cur == null) {
return;
}
findMode1(cur.left);
if (pre == null) {
count = 1;
} else if (pre.val == cur.val) {
count++;
} else {
count = 1;
}
pre = cur;
if (count == maxCount) {
result.add(cur.val);
}
if (count > maxCount) {
maxCount = count;
result.clear();//更新结果集
result.add(cur.val);
}
findMode1(cur.right);
}
}