本文主要是介绍501.二叉搜索树的众数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
501.二叉搜索树中的众数
思路
第一眼,中序遍历+哈希表找最大出现次数解题,暴力解法。需要中序遍历一遍+哈希表取最大值一遍+哈希表根据最大值找对应键一遍。复杂度3n。
后续,可根据二叉搜索树性质来解,在中序遍历时对前后两个相邻的节点值进行判断,若为一样则累加当前节点值的数量,与众数比较大小,判断是否替换将当前值入List。
值得注意的是:return list.stream().mapToInt(Integer::intValue).toArray();
将List转为int[]数组。
代码
public int[] findMode(TreeNode root) {List<Integer> result=new ArrayList<>();TreeNode cur=root;TreeNode pre=null;Stack<TreeNode> stack=new Stack<>();int max=0;int num=0;while (cur!=null || !stack.isEmpty()){if (cur!=null){stack.push(cur);cur=cur.left;}else {cur=stack.pop();if (pre==null || cur.val!= pre.val){num=1;}else {num++;}if (num>max){max=num;result.clear();result.add(cur.val);}else if (num==max){result.add(cur.val);}pre=cur;cur=cur.right;}}return result.stream().mapToInt(Integer::intValue).toArray();}
这篇关于501.二叉搜索树的众数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!