將二叉樹打印成多行

題目:
從上到下按層打印二叉樹,同一層結(jié)點從左至右輸出。每一層輸出一行。

思路:
兩種實現(xiàn)方法:
1.借助兩個隊列,用層數(shù)進行控制兩個隊列的offer.
2.通過每層元素的個數(shù)來控制隊列的offer和新數(shù)組的生成.

代碼:

public class PrintThree
{
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
        if(pRoot == null)
            return arrayLists;

        Queue<TreeNode> queue = new LinkedList<>();
        ArrayList<Integer> arrayList = new ArrayList<>();
        int start = 0;
        int end = 1;
        queue.offer(pRoot);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            start++;
            if(node.left != null)
                queue.add(node.left);
            if(node.right != null)
                queue.add(node.right);

            if(start == end){
                start = 0;
                end = queue.size();
                arrayLists.add(arrayList);
                arrayList = new ArrayList<>();
            }
        }
        return arrayLists;
    }
}
public class PrintTwo
{
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();
        if(pRoot == null){
            return arrayLists;
        }
        int number = 1;
        //奇數(shù)隊列
        Queue<TreeNode> queue1 = new LinkedList<>();
        //偶數(shù)隊列
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.add(pRoot);

        while(!queue1.isEmpty()||!queue2.isEmpty()){
            if(number % 2 != 0){
                ArrayList<Integer> arrayList = new ArrayList<>();
                addNode(queue1,queue2,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }else{
                ArrayList<Integer> arrayList = new ArrayList<>();
                addNode(queue2,queue1,arrayList);
                if(!arrayList.isEmpty()){
                    number++;
                    arrayLists.add(arrayList);
                }
            }
        }
        return arrayLists;
    }
    private void addNode(Queue<TreeNode> queue1,Queue<TreeNode> queue2,ArrayList<Integer> arrayList){
        while(!queue1.isEmpty()){
            TreeNode node = queue1.poll();
            arrayList.add(node.val);
            if(node.left != null)
                queue2.add(node.left);
            if(node.right != null)
                queue2.add(node.right);
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容