LeetCode103_ 103. 二叉树的锯齿形层序遍历
一、描述
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[20,9],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-100 <= Node.val <= 100
二、题解
方法:
S形状走位。相对于上一题的区别就是做了一个层的判断,判断出来在奇数层还是偶数层
/**
* 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<>();
//队列操作,保存跟节点
Queue<TreeNode> q = new LinkedList<>();
//1、跟节点入队
if (root != null) {
q.add(root);
}
//2、队列不为空,出队
while (!q.isEmpty()){
LinkedList<Integer> list = new LinkedList<>();
int qSize = q.size();
for (int i = 0; i < qSize; i++) {
//跟节点
TreeNode node = q.poll();
if (res.size() % 2 == 1) {
list.addFirst(node.val);
} else {
list.addLast(node.val);
}
//左子树
if (node.left != null) {
q.add(node.left);
}
//右子树
if (node.right != null) {
q.add(node.right);
}
}
res.add(list);
}
return res;
}
}
LeetCode 100. 相同的树
LeetCode 101. 对称二叉树
LeetCode 102. 二叉树的层序遍历
LeetCode 103. 二叉树的锯齿形层序遍历
LeetCode 104. 二叉树的最大深度
LeetCode 105. 从前序与中序遍历序列构造二叉树
LeetCode 107. 二叉树的层序遍历 II
LeetCode 108. 将有序数组转换为二叉搜索树
LeetCode 121. 买卖股票的最佳时机
LeetCode 122. 买卖股票的最佳时机 II
LeetCode 136. 只出现一次的数字
声明:
题目版权为原作者所有。文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。
By luoyepiaoxue2014
B站: https://space.bilibili.com/1523287361 点击打开链接
微博: http://weibo.com/luoyepiaoxue2014 点击打开链接