1. 程式人生 > >501. Find Mode in Binary Search Tree

501. Find Mode in Binary Search Tree

element arraylist ati temp 哪些 arc org href search

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than or equal to the node‘s key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node‘s key.
  • Both the left and right subtrees must also be binary search trees.

For example:
Given BST [1,null,2,2],

   1
         2
    /
   2

return [2].

Note: If a tree has more than one mode, you can return them in any order.

Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).

題目含義:給一個二叉搜索樹,求出現次數最多的數是哪個(哪些)

 1     private int maxMode = Integer.MIN_VALUE;
 2     private void readNodeValue(TreeNode root,Map<Integer,Integer> valueMap)
 3     {
 4         if (root == null) return;
 5         valueMap.put(root.val,valueMap.getOrDefault(root.val,0)+1);
 6         maxMode = Math.max(maxMode,valueMap.get(root.val));
7 readNodeValue(root.left,valueMap); 8 readNodeValue(root.right,valueMap); 9 } 10 11 12 public int[] findMode(TreeNode root) { 13 Map<Integer,Integer> valueMap = new HashMap<>(); 14 readNodeValue(root,valueMap); 15 List<Integer> temp = new ArrayList<>(); 16 for (Map.Entry<Integer,Integer> entry:valueMap.entrySet()) 17 { 18 if (entry.getValue() == maxMode) 19 { 20 temp.add(entry.getKey()); 21 } 22 } 23 int[] modes = new int[temp.size()]; 24 for (int i=0;i<modes.length;i++) 25 { 26 modes[i] = temp.get(i); 27 } 28 return modes; 29 }

501. Find Mode in Binary Search Tree