【LeetCode】103. Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历(Medium)(JAVA)
题目地址: https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
题目描述:
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
题目大意
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
解题方法
- 这一题其实就是二叉树的层序遍历,只是在每一层的时候加了一个逆序和顺序的判断
- 二叉树层序遍历:用一个队列保存当前这一层所有的节点;下一层取出上一次的所有节点,然后把不为空的节点再按序加进队列里,就是当前层的所有节点了;不断循环,直到所有层的节点遍历结束为止
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int count = 1;
boolean flag = true;
List<Integer> list = new ArrayList<>();
while (queue.size() > 0) {
TreeNode node = queue.poll();
count--;
if (flag) {
list.add(node.val);
} else {
list.add(0, node.val);
}
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
if (count == 0) {
res.add(list);
list = new ArrayList<>();
count = queue.size();
flag = !flag;
}
}
return res;
}
}
执行耗时:1 ms,击败了98.42% 的Java用户
内存消耗:38.7 MB,击败了49.52% 的Java用户
![](https://i-blog.csdnimg.cn/blog_migrate/6c56d31f951aece27c5faae608dfac2e.jpeg#pic_center)