102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
思考
二叉树的层数遍历,遍历完当前层,需要存储下一层的节点,所以这里我使用Java的队列用来存储下一层节点。
LayerNodes 表示当前层节点数。
temp表示下一层的节点数。
遍历开始前
- 初始化队列
- 队列放入头结点
- 初始化 LayerNodes =1
- 初始化 lists
遍历开始
- 结束条件 ( 队列为空 )
- 初始化list
- 初始化 temp
- 直到遍历完当前层 即LayNodes =0
- list添加当前层节点值,队列添加下一层节点,并用temp记录下一层节点数
- 遍历完当前层,设置LayNodes = temp,lists.add(list)
结束
package 力扣;
import java.util.*;
/**
* @author yyq
* @create 2022-04-06 15:49
*/
public class leetcode102 {
public List<List<Integer>> levelOrder(TreeNode root) {
int LayerNodes = 1;
Queue<TreeNode> queue=new LinkedList<>();
List<List<Integer>> lists = new ArrayList<>();
if(root==null) return lists;
queue.add(root);
while (!queue.isEmpty()){
int temp = 0;
List<Integer> list=new ArrayList<>();
while (LayerNodes!=0){
TreeNode treeNode = queue.poll();
list.add(treeNode.val);
if(treeNode.left!=null)
{
queue.add(treeNode.left);
temp++;
}
if(treeNode.right!=null)
{
queue.add(treeNode.right);
temp++;
}
LayerNodes--;
}
lists.add(list);
LayerNodes=temp;
}
return lists;
}
}