劍指offer——把二叉樹列印成多行
阿新 • • 發佈:2019-01-09
題目描述:
從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
思路:
用一個佇列儲存需要列印的結點,另外需要定義兩個變數,一個表示當前層已經列印的結點數,另一個表示當前層需要列印的總數。當兩個變數相等時,表明當前層列印完畢,進入下一層。
程式碼實現:
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> resultList = new ArrayList<ArrayList<Integer>>();
if(pRoot==null)
return resultList;
int nextNum = 0;//當前層已經列印的數量
int toBePrint = 1; //當前需要列印的數量
Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>(); //建立一個佇列儲存遍歷的順序
nodeQueue.add(pRoot);
ArrayList<Integer> result = new ArrayList<Integer>();
while(!nodeQueue.isEmpty()){
TreeNode curNode = nodeQueue.poll();
result. add(curNode.val);
nextNum++;
if(curNode.left!=null) nodeQueue.add(curNode.left);
if(curNode.right!=null) nodeQueue.add(curNode.right);
//判斷一行的元素是否都新增到result中
if(nextNum ==toBePrint){
resultList.add(result);
toBePrint = nodeQueue.size();
nextNum =0;
result = new ArrayList<Integer>();
}
}
return resultList;
}
}