Binary Tree Zigzag Level Order Traversal

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,#,#,15,7},

    3
   / 
  9  20
    /  
   15   7

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]


public class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) 
    {
        List<List<Integer>> res = new LinkedList<List<Integer>>();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        if(root==null) return res;
        queue.add(root);
        Boolean flag = true;
        while(!queue.isEmpty())
        {
            int levelnum = queue.size();
            ArrayList<Integer> sublist = new ArrayList<Integer>();
            for(int i=0; i<levelnum;i++)
            {
                TreeNode node = queue.poll();
                if(node.left!=null) queue.add(node.left);
                if(node.right!=null) queue.add(node.right);
                sublist.add(node.val);
            }
            if(flag == true)
            {
                res.add(sublist);
                flag = false;
            }
            else
            {
                res.add(reverse(sublist));
                flag = true;
            }
        }
        return res;
        
    }
    
//reverse ArrayList
public ArrayList<Integer> reverse(ArrayList<Integer> list) { for(int i = 0, j = list.size() - 1; i < j; i++) { list.add(i, list.remove(j)); } return list; } }
原文地址:https://www.cnblogs.com/hygeia/p/5090547.html