/* * @lc app=leetcode id=103 lang=java * * [103] Binary Tree Zigzag Level Order Traversal */ // @lc code=start /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List> zigzagLevelOrder(TreeNode root) { if(root == null) { return new ArrayList<>(); } boolean reverse = false; List> ret = new ArrayList<>(); LinkedList queue = new LinkedList<>(); queue.add(root); TreeNode layerEndNode = null, curNode = null; List cache = new ArrayList<>(); while(!queue.isEmpty()) { TreeNode tmp = queue.pollFirst(); cache.addLast(tmp.val); if(tmp.left != null) { queue.addLast(tmp.left); curNode = tmp.left; } if(tmp.right != null) { queue.addLast(tmp.right); curNode = tmp.right; } if(layerEndNode == null || layerEndNode == tmp) { layerEndNode = curNode; if(reverse) { ret.add(cache.reversed()); } else { ret.add(cache); } cache = new ArrayList<>(); reverse = !reverse; } } return ret; } } // @lc code=end