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