1. 程式人生 > >劍指Offer:二叉樹打印成多行【23】

劍指Offer:二叉樹打印成多行【23】

tree height -- main lis true evel width pac

劍指Offer:二叉樹打印成多行【23】

題目描述

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

題目分析

  技術分享圖片

Java題解

package tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class PrintByLevel {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(5);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;
    }
    static ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> re = new ArrayList<>();
        if (pRoot==null)
            return re;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(pRoot);
        int nextLevel =0;
        int toBePrinted = 1;
        ArrayList<Integer> cuLevel = new ArrayList<>();

        while (!queue.isEmpty())
        {
            TreeNode tmp = queue.poll();
            cuLevel.add(tmp.val);
            if(tmp.left!=null)
            {
                queue.add(tmp.left);
                nextLevel++;
            }
            if(tmp.right!=null)
            {
                queue.add(tmp.right);
                nextLevel++;
            }
            toBePrinted--;
            if(toBePrinted==0)
            {
                re.add(cuLevel);
                cuLevel = new ArrayList<>();
                toBePrinted = nextLevel;
                nextLevel=0;
            }

        }
        return re;
    }
}

  

劍指Offer:二叉樹打印成多行【23】