이진 트리 안전의 서비스를 60 프린트 복수의 행을 증명하기 위해

제목 설명

출력층 노드로 왼쪽에서 오른쪽으로, 위에서 아래로 층 이진 트리 인쇄. 출력층의 각 라인.
 

문제 해결 아이디어

按层次输出二叉树

 

  * 访问根节点,并将根节点入队。

 

  * 当队列不空的时候,重复以下操作。

 

  * 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);
    }

 

추천

출처www.cnblogs.com/Transkai/p/11416783.html