题目描述:

解题思路

  1. 设置一个标志位flag,当flag为true时,执行从左到右的遍历,反之则为从右到左

  2. 将数放入到队列中,判断队列是否为空,作为树遍历的结束条件

  3. 代码如下

    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */  
     public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) {
        // write code here
        ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
        if(root==null)return res;
        // 设置一个标志位  
        Boolean flag = true;
        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root);
        while(!que.isEmpty()){
			int size  = que.size();
            ArrayList<Integer> list = new ArrayList<>();
            for(int i = 0; i< size; i++){
                TreeNode node = que.poll();
 				if(flag)list.add(node.val);
				else list.add(0,node.val);
                if(node.left != null) que.offer(node.left);
                if(node.right != null) que.offer(node.right);
            } 
            res.add(list);
            flag = !flag;
        }
        return res;
     }
 
  

该题还可以使用两个栈来做