タイトル説明
出力層のノードで左から右へ、上から下に層にバイナリツリーを印刷します。出力層の各ライン。
問題解決のためのアイデア
按层次输出二叉树
* 访问根节点,并将根节点入队。
* 当队列不空的时候,重复以下操作。
* 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); }