二叉树的锯齿形层序遍历
题目描述
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
Java代码1
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
traversal(root, res, 0);
return res;
}
private void traversal(TreeNode root, List<List<Integer>> res, int level) {
if(root == null) return;
if(res.size() == level) res.add(new ArrayList<>());
if((level % 2) == 1) {
res.get(level).add(0, root.val);
}else {
res.get(level).add(root.val);
}
traversal(root.left, res, level + 1);
traversal(root.right, res, level + 1);
}
}
Java代码2
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
int idx = 0;
if (root != null) {
queue.add(root);
}
while (!queue.isEmpty()) {
int n = queue.size();
idx++;
List<Integer> level = new ArrayList<>();
for (int i = 0; i < n; i++) {
TreeNode node = queue.poll();
level.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
if (idx%2 == 0){
//反转level
Collections.reverse(level);
res.add(level);
}else{
res.add(level);
}
}
return res;
}
}