一 题目
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
二 例子
输入二叉树:
输出:
{[8],[6,10],[5,7,9,11]}
三 思路
思想就是层次遍历,只是要把每一层的节点都存放在同一个list中而已。
①一开始先把根节点添加到list和一个queue中
②while循环判断queue是否为空,不为空的话定义2个变量(low和high),一个值为0,一个值为queue.size(其实就是记录每层的节点数目)
③while(low<high),将队列头结点弹出,然后将非空的左右结点添加到list中
四 程序源码
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> arr = new ArrayList<>();
if (pRoot == null)
return arr;
ArrayList<Integer> list = new ArrayList<>();
list.add(pRoot.val);
arr.add(list);
Queue<TreeNode> q = new LinkedList<>();
q.add(pRoot);
while (!q.isEmpty()){
int low = 0;int high = q.size();
ArrayList<Integer> tmp = new ArrayList<>();
while (low++<high){
TreeNode node = q.remove();
if (node.left!=null){
q.add(node.left);
tmp.add(node.left.val);
}
if (node.right!=null){
q.add(node.right);
tmp.add(node.right.val);
}
}
if (tmp.size()>0){
arr.add(tmp);
}
}
return arr;
}
}