バイナリツリーは、安全性の提供に60の印刷複数の行を証明します

タイトル説明

出力層のノードで左から右へ、上から下に層にバイナリツリーを印刷します。出力層の各ライン。
 

問題解決のためのアイデア

按层次输出二叉树

 

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

 

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

 

  * 1、弹出一个元素。作为当前的根节点。

 

  * 2、如果根节点有左孩子,访问左孩子,并将左孩子入队。

 

  * 3、如果根节点有右孩子,访问右孩子,并将右孩子入队。
 

コードは以下の通りです

  パブリック 静的 ボイドメイン(文字列[]引数){
         INT []配列= {1、2、3、4、5、6、7、8、9 }。
        Solution8 solution8 = 新しいSolution8(); 
        ツリーノードツリーノード = solution8.createBinaryTreeByArray(アレイ、0 );
        (ArrayListのリスト:
                solution8.Print(TREENODE)){ 
            System.out.printlnは(リスト)。
        } 
    } 
    / ** 
     *层次遍历
     * 
     * [ @param PROOT根节点
     * @return ](/プロファイル/ 547241)のArrayList
      * / 
    のArrayList> 印刷(ツリーノードPROOT){
         // ストア結果 
        のArrayList> =のArrayList 新しい新規のArrayList();
         IF(PROOT == NULL ){
             戻りのArrayListを; 
        } 
        // キューを使用し、FIFO 
        キューキュー= 新しい新しいLinkedListのを();
         // 各列のリスト保存 
        ArrayListのArrayListを= 新しい新しいのArrayListを();
         // 現在印刷層の数を記録
        INTスタート= 0 ;
         // レコードは、いくつかの低いプレー
        int型。終了= 1 ; 
        queue.add(PROOT); 
        しばらく(!queue.isEmpty()){ 
            ツリーノードTEMP = queue.remove();
             // のArrayListのバンクに追加
            arrayList.add(temp.val); 
            スタート ++ ;
             // すべてのノード、ノードのルート印刷ノードの周りの一つの層は、キューに入れられ、そしてレコードの数は、次の層に印刷される
            IF(temp.left!= NULL ){ 
                queue.add(temp.left); 
            } 
            IF(!temp.right = NULL ){ 
                キュー。追加(temp.right); 
            } 
            // 印刷層を完了したかどうかの判断
            IF(==開始端は){
                 // キューがノードの次の層に記憶されているこの時点で、キューのサイズが終了します
                端= queue.size()。
                開始 = 0を// 把ArrayListの添加到结果列表のArrayList中
                arrayLists.add(ArrayListの);
                // 重置のArrayList 
                ArrayListを= 新しいArrayListを(); 
            } 
        } 
        戻りのArrayListを、
    } 
    プライベートツリーノードcreateBinaryTreeByArray(INT []配列、int型のインデックス){ 
        ツリーノードTN = NULL ;
        もし(指数< Array.lengthと){
             int型値=配列[インデックス]。
            TN = 新しいツリーノード(値)。
            tn.left = createBinaryTreeByArray(アレイ、2 *指数+ 1 )。
            tn.right = createBinaryTreeByArray(アレイ、2 *指数+ 2 )。
            戻るテネシー州。
        } 
        戻りTNと、
    } 
    パブリック クラスツリーノード{
         int型のval = 0 ; 
        TreeNodeのは左 = ヌル; 
        ツリーノードを右 = nullを公共のTreeNode(int型のval){
            この .val = 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