题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
思路一 - 广度优先搜索
利用广度优先搜索的思路
将其应用在层次遍历中
但是层次遍历有个层次感,需要一层一层输出区分
可以外加一个队列进行输出判断
每一个层都是arraylist的集合,整个大层次也是一个arraylist的大集合
特别注意,Queue<TreeNode> que=new LinkedList<TreeNode>();
,队列中如果加入队列,通过offer,输出队列的值,通过poll函数,具体输出队列的之后,放入到每一层的小集合中,需要通过一个node的val值,毕竟它是存储的值。而且每一层的结尾还需要将其加入一个大层次集合中,用到list.add(listson);
。整体整个框架结构的判断通过队列是否有无空!que.isEmpty()
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list =new ArrayList<List<Integer>>();
if(root ==null) return list;
Queue<TreeNode> que=new LinkedList<TreeNode>();
que.offer(root);
while(!que.isEmpty()){
List<Integer> listson =new ArrayList<Integer>();
int n=que.size();
for(int i=1;i<=n;i++){
TreeNode node=que.poll();
listson.add(node.val);
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
}
list.add(listson);
}
return list;
}
}