1 题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
来源:力扣(LeetCode)
链接:102. 二叉树的层序遍历
2 算法思想
层序遍历一个二叉树,就是按照从左到右一层层的去遍历二叉树。由于队列有先进先出的特性,符合一层层遍历的逻辑,层序遍历的方式类似于图的BFS遍历。这里借助队列,采用BFS迭代的方式进行层序遍历。
3 代码实现
public class LevelOrder {
public List<List<Integer>> resList = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(TreeNode root) {
function(root);
return resList;
}
public void function(TreeNode node){
if (node == null) return;
//定义一个队列临时存储层序遍历过程中每一层遍历到的节点
Queue<TreeNode> que = new LinkedList<>();
//从根节点开始,入队
que.offer(node);
while (!que.isEmpty()){
//定义一个list数组,存储每一层的节点
ArrayList<Integer> itemList = new ArrayList<>();
//当前队列的长度即每一层遍历到的节点个数
int len = que.size();
while (len > 0){
TreeNode tempNode = que.poll();
itemList.add(tempNode.val);
//将下一层的节点加入队列,进行迭代
if (tempNode.left != null) que.offer(tempNode.left);
if (tempNode.right != null) que.offer(tempNode.right);
len--;
}
resList.add(itemList);
}
}
}