描述
给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出。每一层输出一行。
例如:
给定的二叉树是{1,2,3,#,#,4,5}
该二叉树多行打印层序遍历的结果是
[
[1],
[2,3],
[4,5]
]
数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000,0 \le val \le 10000≤val≤1000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
输入描述:
给定一个二叉树的根节点
示例1
输入:
{1,2,3,#,#,4,5}
返回值:
[[1],[2,3],[4,5]]
示例2
输入:
{8,6,10,5,7,9,11}
返回值:
[[8],[6,10],[5,7,9,11]]
示例3
输入:
{1,2,3,4,5}
返回值:
[[1],[2,3],[4,5]]
示例4
输入:
{}
返回值:
[]
题解
层序遍历,ArrayList保存各层节点。
import java.util.ArrayList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if(pRoot == null) return res;
Queue<TreeNode> q = new LinkedList<>();
q.offer(pRoot);
while(!q.isEmpty()){
int size = q.size();
ArrayList<Integer> temp = new ArrayList<>();
while(size -- > 0){
TreeNode node = q.poll();
temp.add(node.val);
if(node.left != null) q.offer(node.left);
if(node.right != null) q.offer(node.right);
}
res.add(new ArrayList(temp));
}
return res;
}
}