给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
方法一:中序遍历
思路:中序遍历二叉搜索树得到按从小到大排序的ans,再遍历ans,将众数记录到temp中(借助定义base、count、maxCount,完成实现),再将temp链表转化成mode数组返回
class Solution {
public int[] findMode(TreeNode root) {
// 中序遍历得到从小到大arr
Deque<TreeNode> stack = new LinkedList<>();
List<Integer> ans = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
TreeNode cur = root;
while(!stack.isEmpty() || root != null){
while(root != null){
stack.push(root)