103. 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(root==null) return res;
levelorder(res,root);
return res;
}
public void levelorder(List<List<Integer>> res,TreeNode root){
Queue<TreeNode> queue = new LinkedList<TreeNode>();
Deque<TreeNode> deque = new LinkedList<TreeNode>();
queue.offer(root);
TreeNode tep;
int contrl = 2;
while(!queue.isEmpty()){
int len = queue.size();
List<Integer> ans = new ArrayList<Integer>();
for(int i = 0 ; i < len ; i++){
tep = queue.poll();
ans.add(tep.val);
deque.push(tep);
}
for (int j = 0 ; j < len ; j++){
tep = deque.peek();
deque.pop();
if(tep.right !=null && len == 1){
queue.add(tep.right);
if(tep.left == null) break;
}
if( tep.left != null && len == 1){
queue.add(tep.left);
break;
}
if(contrl%2!=0){
if( tep.left !=null){
queue.add(tep.left);
}
if( tep.right !=null){
queue.add(tep.right);
}
}
else if( contrl % 2 == 0 ){
if( tep.right !=null){
queue.add(tep.right);
}
if( tep.left !=null){
queue.add(tep.left);
}
}
}
contrl++;
res.add(ans);
}
}
}