马可波罗网,系统优化的知识,软考网络规划设计师论文,佛山新网站制作渠道题目
给你一个含重复值的二叉搜索树#xff08;BST#xff09;的根节点 root #xff0c;找出并返回 BST 中的所有 众数#xff08;即#xff0c;出现频率最高的元素#xff09;。
如果树中有不止一个众数#xff0c;可以按 任意顺序 返回。
假定 BST 满足如下定义BST的根节点 root 找出并返回 BST 中的所有 众数即出现频率最高的元素。
如果树中有不止一个众数可以按 任意顺序 返回。
假定 BST 满足如下定义
结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树
示例 1 输入root [1,null,2,2]
输出[2]示例 2
输入root [0]
输出[0]
题解
/*** 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 {ListInteger ans new ArrayList();int cur 0;int cnt 0;int maxcnt 0;public int[] findMode(TreeNode root) {dfs(root);//定义一个数组接收答案int[] res new int[ans.size()];for(int i 0; i ans.size(); i) {res[i] ans.get(i);}return res;}private void dfs(TreeNode root) {if (root null) {return;}dfs(root.left);if (root.val cur) {cnt;} else {cur root.val;cnt 1;}if (maxcnt cnt) {ans.add(root.val);} else if (maxcnt cnt) {//更新最大值ans.clear();ans.add(root.val);maxcnt cnt;}dfs(root.right);}
}