剑指Offer------把二叉树打印成多行(层序遍历)

来源:互联网 发布:天谕玉虚捏脸数据下载 编辑:程序博客网 时间:2024/06/15 02:32

题目描述

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

<分析>
本题就是多了个条件
一层输出一行
那么就多设置两个变量即可,
一个此行开始start,另一个此行结束end
当遍历到end时,就将这行数据存入list中即可
package com.ex.string;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}/** *  * @author 周颖 * @date 2017年10月13日 下午9:12:42 * @Decription 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 */public class Ex7 {ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> result = new ArrayList<>();if (pRoot==null) {return result;}Queue<TreeNode> queue = new LinkedList<>();ArrayList<Integer> list = new ArrayList<>();//根结点入队queue.offer(pRoot);//第一行只有一个结点,故终点为1int start=0,end=1;while(!queue.isEmpty()){TreeNode node = queue.poll();list.add(node.val);start++;if (node.left!=null) {queue.offer(node.left);}if (node.right!=null) {queue.offer(node.right);}if (start==end) {end=queue.size();start=0;result.add(list);list=new ArrayList<>();}}return result;}}