思路:
(1)对二叉树进行中序遍历,遍历结果存入res。
(2)遍历res,用map记录每个值出现的次数。
(3)遍历map,找出出现次数最多的值,为方便,先将值存入set,再遍历set存入数组result。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int[] findMode(TreeNode root) {
List<Integer> res = inorderTraversal(root);
int size = res.size();
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < size; i++) {
int tmp = res.get(i);
if (map.containsKey(tmp))
map.put(tmp, map.get(tmp) + 1);
else
map.put(tmp, 1);
}
Set<Integer> set = map.keySet();
Iterator<Integer> it = set.iterator();
int max = Integer.MIN_VALUE, i = 0;
Set<Integer> sets = new HashSet<Integer>();
while (it.hasNext()) {
Integer temp = it.next();
if (map.get(temp) > max) {
sets.clear();
sets.add(temp);
max = map.get(temp);
}
else if (map.get(temp) == max)
sets.add(temp);
}
it = sets.iterator();
int[] result = new int[sets.size()];
while(it.hasNext()){
result[i] = it.next();
i++;
}
return result;
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
if (root == null)
return result;
if (root.left != null) {
List<Integer> res = inorderTraversal(root.left);
result.addAll(res);
}
result.add(root.val);
if (root.right != null) {
List<Integer> res = inorderTraversal(root.right);
result.addAll(res);
}
return result;
}
}
Runtime:20ms