题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
<分析>:
本题就是多了个条件
一层输出一行
那么就多设置两个变量即可,
一个此行开始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);
//第一行只有一个结点,故终点为1
int 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;
}
}