이진 검색 트리 (501) 찾기 모드
쉬운
중복과 이진 검색 트리 (BST)을 감안할 때, 모든 찾을 모드 (들) 주어진 BST에서 (가장 자주 요소 발생).
다음과 같이 정의된다 BST 가정
- 노드의 왼쪽 하위 트리 또는 노드의 키와 같은보다 작은 키를 사용하여 노드 만 포함되어 있습니다.
- 노드의 오른쪽 서브 트리보다 크거나 노드의 키와 동일한 키 노드 만 포함되어 있습니다.
- 모두 왼쪽과 오른쪽 서브 트리도 이진 검색 나무이어야합니다.
예를 들어
주어 BST [1,null,2,2]
,
1 \ 2 / 2
반환 [2]
.
주 : 나무 하나 개 이상의 모드가있는 경우, 당신이 어떤 순서로 반환 할 수 있습니다.
후속 : 당신이 할 수있는 여분의 공간을 사용하지 않고? (순환으로 인해 발생하는 암시 스택 공간이 계산되지 않는다고 가정한다).
leetcode.easy 패키지; / ** * 이진 트리 노드에 대한 정의. 공용 클래스의 TreeNode {INT의 발; TreeNode를 * 왼쪽; TreeNode를 오른쪽; TreeNode를 INT (X) {X = 브로; }} * / 공용 클래스 FindModeInBinarySearchTree { 개인 정적 무효 print_arr (INT []를 nums) { (INT 인분 : nums)가 { System.out.print (NUM + ""); } 에서 System.out.println (); } java.util.Map <정수 정수>지도; INT 최대 = 0; 공개 INT는 [] findMode (TreeNode를 루트) { this.map java.util.HashMap에 새를 <> () =; 중위 (루트); 이 java.util.List에 <정수>에서 새로운되는 java.util.LinkedList를 <> () =; 대한 (INT 키 map.keySet ()) { (map.get (키) == 최대) {경우 에는 list.add (키); } } INT [] NUM = 새로운 INT [는 list.size ()]; 경우 (나는 <는 list.size (); INT 나 0 = I ++) { NUM [I] = list.get (I); } NUM을 반환; } 공공 무효 중위 (TreeNode를 루트) { 경우 (루트 == NULL) { 반환; } map.put (root.val, map.getOrDefault (root.val, 0) + 1); 경우 (map.get (root.val)> 최대) { 최대 = map.get (root.val); } 중위 (root.left); 중위 (root.right); } @ org.junit.Test 공개 무효 시험 () { TreeNode를 tn11 = 새로운 TreeNode를 (1); TreeNode를 tn22 = 새의 TreeNode (2); TreeNode를 TN33 = 새의 TreeNode (2); tn11.left = NULL; tn11.right = tn22; tn22.left = TN33; tn22.right = NULL; tn33.left = NULL; tn33.right = NULL; print_arr (findMode (tn11)); } }