给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST[1,null,2,2]
,1 \ 2 / 2
返回[2]
.
解题思路:由于二叉树的特性,中序遍历后,节点值相同的一定是紧挨着的,所以可以用中序遍历来做,记录当前节点的pre节点,用来比较两个节点的值是否相同。再使用两个变量,一个变量记录最大重复次数,另一个记录当前遍历的最大重复次数,相互比较进行更新,最终获得最大重复次数的节点值列表。
class Solution {
TreeNode pre = null;
int max = 1;
int cur = 1;
public int[] findMode(TreeNode root) {
List<Integer> nums = new ArrayList<>();
inOrder(root,nums);
int[] result = new int[nums.size()];
int index = 0;
for(int i : nums){
result[index++] = i;
}
r