/* * @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<>(); } LinkedList queue = new LinkedList<>(); ArrayList stack = new ArrayList<>(); queue.add(root); List> ret = new ArrayList<>(); List curLayer = new ArrayList<>(); TreeNode lastLayerNode = null, curLayerNode; while(!queue.isEmpty()) { TreeNode tmp = queue.pollFirst(); curLayer.add(tmp.val); if(tmp.left != null) { // queue.add(tmp.left); stack.addLast(tmp.left); } if(tmp.right != null) { // queue.add(tmp.right); stack.addLast(tmp.right); } if(tmp == lastLayerNode || lastLayerNode == null) { // while() // ret.add(curLayer); // curLayer = new ArrayList<>(); // lastLayerNode = curLayerNode; while(!stack.isEmpty()) { curLayerNode = stack.pollLast(); queue.add(curLayerNode); } lastLayerNode = curLayerNode; ret.add(curLayer); curLayer = new ArrayList<>(); } } return ret; } } // @lc code=end