题目
给你二叉树的根节点 root
,返回其节点值的
锯齿形层序遍历
。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
示例 2:
示例 3:
提示:
- 树中节点数目在范围
[0, 2000]
内
-100 <= Node.val <= 100
题解
这一题是普通的BFS
,但是我们保存数据的时候,用到了双端队列,如果是奇数行,添加到tmp
的尾部,如果是偶数行,添加到tmp
的头部。奇数行偶数行用res.size() % 2 == 0
来判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); if (root != null) queue.add(root); while (!queue.isEmpty()) { LinkedList<Integer> tmp = new LinkedList<>(); for (int i = queue.size(); i > 0; i--) { TreeNode node = queue.poll(); if (res.size() % 2 == 0) tmp.addLast(node.val); else tmp.addFirst(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } res.add(tmp); } return res; } }
|