103. Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:试卷生成软件 编辑:程序博客网 时间:2024/05/21 17:11

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]]
My code:

public class Solution {    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {        List<List<Integer>> result = new LinkedList<List<Integer>>();          Queue<TreeNode> queue = new LinkedList<TreeNode>();          if(root==null) return result;          queue.offer(root);          int index =0;          while(!queue.isEmpty()){              int levelNum = queue.size();              List<Integer> subList = new LinkedList<Integer>();              for(int i=0; i<levelNum; i++) {                  if(queue.peek().left != null) queue.offer(queue.peek().left);                  if(queue.peek().right != null) queue.offer(queue.peek().right);                  if(index%2==0) subList.add(queue.poll().val);                else subList.add(0,queue.poll().val);            }              index +=1;            result.add(subList);          }          return result;      }}
总结:在普通的层次遍历基础上加了一个判断,记住可以使用add(0,val)实现反序,这一点看了参考答案。




0 0