Mode in LeetCode Binary Search Tree

1. Title

Insert picture description here


2. Ideas (description in Java language)

Record Max during the middle order traversal process, map all nodes with Map, and finally traverse the Map, and select the key that meets the conditions.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    

    Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    int max = 0;

    public int[] findMode(TreeNode root) {
    
    
        centerOrder(root,map);
        return mapToIntegerArray(map);
    }

    public void centerOrder(TreeNode root,Map<Integer,Integer> map){
    
    
        if(root!=null){
    
    
            centerOrder(root.left,map);
            int speed = map.getOrDefault(root.val,0)+1;
            if(max<speed){
    
    
                max = speed;
            }
            map.put(root.val,speed);
            centerOrder(root.right,map);
        }
    }

    public int[] mapToIntegerArray(Map<Integer,Integer> map){
    
    
        if(map == null){
    
    
            return null;
        }
        Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
        ArrayList<Integer> list = new ArrayList<Integer>();
        while(entries.hasNext()){
    
    
            Map.Entry<Integer,Integer> entry = entries.next();
            int tmp = entry.getValue();
            if(tmp == max){
    
    
                list.add(entry.getKey());
            }
        }
        int[] result = new int[list.size()];
        int cnt=0;
        for(Integer num:list){
    
    
            result[cnt++] = num.intValue();
        }
        return result;
    }

}

3. Review of knowledge points about Map

1. The most efficient way to traverse Map is to use Iterator to traverse

Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    
    
    Map.Entry<Integer,Integer> entry = entries.next();
    System.out.println("key: "+entry.getKey()+", value: "+entry.getValue());
}

2.map.getOrDefault()

//如果map中有存储key的value,则 temp = map.get(key)
//否则 temp = 0;
int temp = map.getOrDefault(key,0);

Guess you like

Origin blog.csdn.net/weixin_43967679/article/details/108771528