剑指offer—把二叉树打印成多行

来源:互联网 发布:淘宝店铺装修宝贝 编辑:程序博客网 时间:2024/06/11 04:07

题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

import java.util.LinkedList;import java.util.ArrayList;import java.util.Queue;public class Solution {    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();        if(pRoot==null) return res;        Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.add(pRoot);        int numOfThisLine = 1;        int numOfNextLine = 0;        ArrayList<Integer> floor = new ArrayList<Integer>();        while(!queue.isEmpty()){            TreeNode temp = queue.poll();            floor.add(temp.val);            numOfThisLine--;            if(temp.left!=null){                queue.add(temp.left);                numOfNextLine++;            }            if(temp.right!=null){                queue.add(temp.right);                numOfNextLine++;            }            if(numOfThisLine==0){                res.add(floor);                numOfThisLine = numOfNextLine;                numOfNextLine = 0;                floor = new ArrayList<Integer>();            }        }        return res;    }}

和题目从上之下打印二叉树很类似,只不过这里有一个限制条件,必须一行一行的打印,同样也是是一个队列,不断从队尾添加元素,以及从对头扫描并删除元素,为了实现一行一行的打印,这里需要设置两个变量,一个是当前层中还没有打印的结点个数,一个是下行需要打印结点的个数

原创粉丝点击