leetcode 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],
1
\
2
/
2
返回[2].
提示:如果众数超过1个,不需考虑输出顺序
进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
中序遍历二叉搜索树,遇到和上次不同的数字,就从0开始计算,否则,次数+1.之后和最大值比较,若是大,则替换最大值。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { List<Integer> list = new ArrayList<>(); int count = 0; int max = 0; int item = 0; public int[] findMode(TreeNode root) { find(root); int size = list.size(); int[] arr = new int[size]; for (int i = 0; i < size; ++i) { arr[i] = list.get(i); } return arr; } public void find(TreeNode node) { if (node == null) { return; } find(node.left); int val = node.val; if (val == item) { count++; } else { item = val; count = 1; } if (count == max) { list.add(val); } else if (count > max) { max = count; list.clear(); list.add(val); } find(node.right); } }