제목 설명
계층 이진 트리 탐색 자바 트리 구조, 계층 이진 트리 탐색을 사용. 이진 트리의 시퀀스 주어 진 트리 순회 계층 위에서 아래로, 즉, 이진 트리 액세스 레벨 (각 개별 라인의 출력 레벨)을 필요로 각 층에 대한 액세스 요구로부터, 우측 후 동일한 규칙을 남겨 트리 노드에서 다시 하단까지 순회는 다음과 같이 정의되는 클래스 {노드 INT에서 , 데이터 노드 왼쪽, 상기 노드 오른쪽 } 입력 설명 :도 __1__ / \ __2__ 3__ / \ \ 4 __5__ 6. 7.8. 입력 이상 : 1, 2, 3, 4, 5, 0, 6, 0, 0, 7 , 8 주 : 0이된다는 위치 번호, 데이터 길이를 024 개 이하를 의미한다. 정보 출력 순방향 및 역방향 이진 출력 레벨에 따른, 광고의 출력단에는 공간 주석이없는 실시 예 1 입력 1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8 개, 출력 1 2 3 4 5 6 7 8 . 제 7 . 4. 5. 6 3 2 1
코드
수입 인 java.util.ArrayList; 수입 되는 java.util.LinkedList; 수입 은 java.util.List; 수입 java.util.Queue; 수입 java.util.Scanner; 클래스 노드 { INT의 발; 노드 왼쪽; 노드 권리; 공개 노드 ( INT의 발) { 이 .val = 브로; } } 공용 클래스 A1 { 공공 정적 무효 메인 (문자열 []에 args) { 스캐너 SC = 새로운 스캐너 (System.in); 문자열 [] str을sc.nextLine = () 스플릿 ( "." ); INT LEN = str.length; 값 int [] 데이터 = 새로운 INT [렌]을; 위한 ( int로 ; 나는 LEN <I는 I = 0 ++ ) { 데이터 [I] = Integer.valueOf (STR [I]); } 노드 루트 = CREAT (데이터); 목록 <리스트 <정수 >> 결과 = levelorder (루트); 위한 ( int로 I = 0; I)이 (result.size를 <; 내가 ++ ) { 대 ( INT의 J = 0; J <result.get (I)의 크기는 (); J ++ ) { System.out.print (result.get (I) 갔지 (j) + "" ); } 에서 System.out.println (); } 에서 System.out.println (); 위한 ( int로 난을 result.size = () - 1] I> = 0; 난 ... ) { 대 ( INT의 J = 0; J <result.get (I)의 크기는 (); J ++ ) { System.out을한다. 인쇄 (result.get (I) 갔지 (j) + "" ); } 에서 System.out.println (); } } 공용 정적 노드 CREAT ( INT [] OBJS) { ArrayList를 <노드> = datas새로운 새로운 ArrayList를 <노드> (); // 값이 배열 순서 노드 노드로 변환되고, 대 ( INT의 O : OBJS) { datas.add ( 새로운 신규 노드 (O)); } // 제 번호는 루트 인 노드 = datas.get 루트 (0 ); // 이진 트리 에 대한 ( int로 I = 0; 나는 objs.length / 2 <; 내가 ++ ) { // 왼쪽 아이 IF (datas.get (I + 2 * 1) .val.! = 0 ) { datas.get (I) .left = datas.get (I + 2 * 1. ) } // 오른쪽 아이 하다면((I *가 + 2) <datas.size () && datas.get (I .val는 2 + 2) *! = 0) { // 회피 짝수 경계 때 첨자 datas.get (I) = 됐지 datas.get (I는 2 + 2 * ) } } 복귀 루트; } 공용 정적 리스트 <일람 <정수 >> levelorder (노드 노드) { 큐 <노드를> 큐 = 새로운 새 LinkedList의 <> () 에서 <목록 <정수 결과 = >> 새로운 새로운 ArrayList를 <> (); Queue.offer (노드); // 첫 번째 루트 루트가 대기열에 그동안를 (! queue.isEmpty ()) { // 큐가 비어 있지, 루프 목록 <정수>노드 =새로운 새로운 ArrayList를 <> (); //는 각 계층의 노드에서의 값을 저장 INT의 길이 = queue.size을 (); // 각 계층의 노드 번호 그동안 (길이> 0 ) { 노드 트리 = queue.poll (); IF (! = tree.left 널 ) { Queue.offer (tree.left) } IF (tree.right =! 널 ) { Queue.offer (tree.right) } node.add (tree.val) 길이 - - ; } //사이클 후, 생성 층이 다음 큐, 현재 레이어의 결과를 통해 노드 제조 ; result.add (노드) } 리턴 ; 결과 } }