给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
详解:这道题的关键在于通过两个栈配合来完成对二叉树的锯齿形层次遍历,当栈1不为空而栈2为空时,顺序遍历这一层;当栈1为空,栈2不为空时逆序遍历这一层。
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> list = new LinkedList<>();
if(root==null) return list;
LinkedList<TreeNode> list1 = new LinkedList<>();
LinkedList<TreeNode> list2 = new LinkedList<>();
list1.add(root);
while(!list1.isEmpty()||!list2.isEmpty()){
if(!list1.isEmpty()&&list2.isEmpty()){
List<Integer> result = new LinkedList<>();
while(!list1.isEmpty()){
TreeNode node = list1.removeFirst();
result.add(node.val);
if(node.left!=null) list2.addFirst(node.left);
if(node.right!=null) list2.addFirst(node.right);
}
list.add(result);
}else if(list1.isEmpty()&&!list2.isEmpty()){
List<Integer> result = new LinkedList<>();
while(!list2.isEmpty()){
TreeNode node = list2.removeFirst();
result.add(node.val);
if(node.right!=null) list1.addFirst(node.right);
if(node.left!=null) list1.addFirst(node.left);
}
list.add(result);
}
}
return list;
}
}