제목 설명
출력층 노드로 왼쪽에서 오른쪽으로, 위에서 아래로 층 이진 트리 인쇄. 출력층의 각 라인.
문제 해결 아이디어
按层次输出二叉树
* 访问根节点,并将根节点入队。
* 当队列不空的时候,重复以下操作。
* 1、弹出一个元素。作为当前的根节点。
* 2、如果根节点有左孩子,访问左孩子,并将左孩子入队。
* 3、如果根节点有右孩子,访问右孩子,并将右孩子入队。
다음 코드는
공공 정적 무효 메인 (문자열 []에 args) {
int로 [] 배열 = {1, 2, 3, 4, 5, 6, 7, 8, 9 };
Solution8의 solution8 = 새로운 Solution8 ();
TreeNode를 TREENODE = solution8.createBinaryTreeByArray (배열, 0 );
대한 (ArrayList를 목록 :
solution8.Print (TREENODE)) {
에서 System.out.println (리스트);
}
}
/ **
*层次遍历
*
* @param의 pRoot根节点
* @ 반환 (/ 프로필 / 547,241) arrayLists
* /
ArrayList를> 인쇄 (TreeNode를 PROOT는) {
// 결과를 저장
ArrayList를가> = ArrayLists 새로운 새로운 ArrayList를 ();
IF (PROOT == 널 ) {
반환 ArrayLists 단계;
}
// 큐를 사용를 상기 FIFO
큐 큐 = 새로운 새 LinkedList의 ();
// 각 행의리스트 저장
ArrayList의 ArrayList를 = 새로운 새로운 ArrayList를가 ();
// 본 인쇄 층의 수를 기록하는
INT 시작 = 0 ;
// 레코드 여러 하부 재생
INT의 종료. = 1 ;
queue.add (PROOT)
그동안을 (!queue.isEmpty ()) {
TreeNode를의 TEMP = queue.remove ();
// ArrayList의 은행에 추가
arrayList.add (temp.val)
시작 ++ ;
// 마다, 노드 라우팅을 노드를 인쇄 노드 대략 1 층은 대기하고, 레코드의 수는 다음 층을 인쇄하는
경우 (temp.left =! 널 ) {
queue.add (temp.left)
}
IF (! = temp.right 널 ) {
큐. ; 추가 (temp.right)
}
// 레이어를 완료 여부 인쇄 판단
하는 경우 (== 시작 끝) {
// 큐가 노드의 다음 층에 저장되어있는이 시점에서, 큐의 크기가 끝입니다
단부 = queue.size ();
시작 = 0 ;
// 把ArrayList를添加到结果列表arrayLists中
arrayLists.add (ArrayList에);
// 重置의 ArrayList
의 ArrayList = 새로운 ArrayList를 ();
}
}
반환 arrayLists을;
}
개인 의 TreeNode createBinaryTreeByArray ( INT [] 배열 INT의 인덱스) {
TreeNode를 TN = 널 ;
경우 (인덱스 < 사항 Array.length) {
INT의 값 =어레이 [인덱스];
TN = 새 의 TreeNode (값);
tn.left = createBinaryTreeByArray (배열 2 * 인덱스 + 1 );
tn.right = createBinaryTreeByArray (배열 2 * 인덱스 + 2 );
반환 테네시;
}
반환 테네시;
}
공용 클래스 의 TreeNode {
INT 발 = 0 ;
TreeNode를 왼쪽 = 널을 ;
TreeNode를 잘 = 널 (null) ;
공공 의 TreeNode ( INT의 발) {
이 .val = 브로;
}
}
위대한 하나님 코드
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); depth(pRoot, 1, list); return list; } private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) { if(root == null) return; if(depth > list.size()) list.add(new ArrayList<Integer>()); list.get(depth -1).add(root.val); depth(root.left, depth + 1, list); depth(root.right, depth + 1, list); }