class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
//VALUE是次数,key是num
//构建map
for (int num : nums){
map.put(num , map.getOrDefault(num, 0) +1);
}
//构建小顶堆;大顶堆就是pair2[1]-pair1[1]
PriorityQueue<int[]> pq = new PriorityQueue<>((pair1,pair2) -> pair1[1] - pair2[1]);
//把map中数据放入顶堆对比,数据从小到大排列;Map.Entry是为了更方便的输出map键值对
for (Map.Entry<Integer,Integer> entry : map.entrySet()){
if(pq.size() < k){
pq.add(new int[]{entry.getKey(),entry.getValue()});
}else{
if(pq.peek()[1] < entry.getValue()){
pq.poll();
pq.add(new int[]{entry.getKey(),entry.getValue()} );
}
}
}
int[] res = new int[k];
for (int i = k - 1 ; i >= 0 ; i--){
res[i] = pq.poll()[0];
}
return res;
}
}
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder (TreeNode root, List<Integer> result){
if (root == null){
return;
}
result.add(root.val);
preorder(root.left, result); //递归调用 preorder 方法,遍历左子树
preorder(root.right, result);
}
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder (TreeNode root, List<Integer> result){
if (root == null){
return;
}
preorder(root.left, result); //递归调用 preorder 方法,遍历左子树
preorder(root.right, result);
result.add(root.val);
}
}
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder (TreeNode root, List<Integer> result){
if (root == null){
return;
}
preorder(root.left, result); //递归调用 preorder 方法,遍历左子树
result.add(root.val);
preorder(root.right, result);
}
}