정렬 + 예약 주문 탐색 시간 복잡도 : O (nlogn) 공간의 복잡도 : O (N)
. 1 클래스 솔루션 { 2 개인 INT RES = Integer.MAX_VALUE를; . 3 개인 ArrayList의 <정수> =이 배열 새로운 새로운 ArrayList를 <> (); . 4 공공 INT getMinimumDifference합니다 (TreeNode를 루트) { 5. DFS (루트); // 예약 주문 탐색 트리의 전 노드 엘리먼트 . 6 은, Collections.sort (ARRY); // 정렬 7. 대 ( INT I = 0; I는 <arry.size () - 1]. I ++) { // 최소 절대 차가 확실히 크기의 두 개의 인접한 소자에 의해 생성 된 8 INT의 TEMP는 Math.abs을 = (. arry.get (I + 1) - arry.get (I)) 9. IF(온도 <해상도) = 입술 온도; 10 } 11 리턴 입술; 12 } 13 무효 DFS (TreeNode를 루트) { 14 일 경우 (루트 == 널 ) 창 ; 15 arry.add (root.val); 16 DFS (root.left); 17 DFS (root.right); 18 } 19 }
I이 이진 검색 트리 탐색 순서는 절대적인 최소의 다음 다음 레코드를 큰 배열의 요소 값, 연신 소자 작은에서 얻은 기존의 요소의 절대 값의 차이를 산출하고, 인 것을 보지 못했다 차이를 비교하고, 시간 복잡도 : O (N), 공간적 복잡도 : O (1)
. (1 개) 클래스 해결 { 2 개인 INT의 사전 = Integer.MAX_VALUE로는; // 초기 값을 설정한다 (3). 개인 INT RES = Integer.MAX_VALUE로; // 최소 절대 차를 기록 . 4 공공 의 INT getMinimumDifference (TreeNode를 루트) { 5. DFS (루트) . 6 창 RES] . 7 } . 8 공극 DFS (TreeNode를 루트) { // 전순 . 9 IF (루트 == 널 ) 창 , 10 DFS (root.left) . 11 Mathmin는 RES (입술, Mathabs (프리 = rootval을)); (12) 그리고 예비 = rootval; 13 DFS (rootright); 14 } 15 }