提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
3月4日练习内容
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目-二叉树的锯齿形层序遍历
1.题目描述
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路与代码
2.1 思路
1.先判断输入的二叉树是否为空,
2.创建队列,利用队列先入先出的性质,将二叉树添加到队列中
3.获取每层个数,遍历每一层,将结果放入子集合中,
4.使用BFS遍历二叉树,并设立转向标志,当为true时从左往右遍历,为false时从右往左遍历
5输出
2.2 代码
代码如下(示例):
/**
* 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>> zigzagLevelOrder(TreeNode root) {
//创建结果集合
List<List<Integer>> res = new ArrayList<>();
//判断二叉树是否为空
if(root == null){
return res;
}
//队列
Queue<TreeNode> que = new LinkedList<>();
//将头结点加入队列
que.add(root);
//定义一个遍历转向标志
//true时从左往右遍历
//false时从右往左遍历
boolean leftToright = true;
while(!que.isEmpty()){
//存储每一层结点
List<Integer> row = new ArrayList<>();
//获取每一层的元素个数
int size = que.size();
for(int i = 0;i < size;i ++){
//每遍历一次将队列头部元素加入数组
//队列为先进先出
//所以先进入队列的最先输出
TreeNode node = que.poll();
if(leftToright){
row.add(node.val);
}else{
//不断的把新遍历出的结点放入数组的第一个位置,以达到倒序输入的效果
row.add(0,node.val);
}
if(node.left != null){
que.add(node.left);
}
if(node.right != null){
que.add(node.right);
}
}
//将每一层的结果放入res
res.add(row);
//改变遍历朝向
leftToright = !leftToright;
}
return res;
}
}
总结
提示:这里对文章进行总结: