1. 程式人生 > >劍指offer——把二叉樹列印成多行

劍指offer——把二叉樹列印成多行

題目描述:

從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。

思路:

用一個佇列儲存需要列印的結點,另外需要定義兩個變數,一個表示當前層已經列印的結點數,另一個表示當前層需要列印的總數。當兩個變數相等時,表明當前層列印完畢,進入下一層。

程式碼實現:

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