LeetCode_501. 이진 검색 트리에 모드 찾기

 

이진 검색 트리 (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)); 
	} 
}

 

추천

출처www.cnblogs.com/denggelin/p/12128022.html