• Source
    1. /**
    2. Definition for a binary tree node.*/
    3. import java.util.*;
    4.  
    5. class TreeNode {
    6.  
    7. int val;
    8. TreeNode left;
    9. TreeNode right;
    10. TreeNode() {}
    11. TreeNode(int val) { this.val = val; }
    12. TreeNode(int val, TreeNode left, TreeNode right) {
    13. this.val = val;
    14. this.left = left;
    15. this.right = right;
    16. }
    17. }
    18. class Solution {
    19.  
    20. public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    21. List<List<Integer>> output = new ArrayList<>();
    22.  
    23. if(root == null)
    24. return output;
    25.  
    26. Stack<TreeNode> parent = new Stack<>();
    27. Stack<TreeNode> child = new Stack<>();
    28. boolean leftToRight = true;
    29.  
    30. parent.add(root);
    31.  
    32. List<Integer> level = new ArrayList<>();
    33. while(!parent.isEmpty()){
    34. TreeNode node = parent.pop();
    35. level.add(node.val);
    36. if(leftToRight){
    37. if(node.left!=null) child.add(node.left);
    38. if(node.right!=null) child.add(node.right);
    39. }
    40. else{
    41. if(node.right!=null) child.add(node.right);
    42. if(node.left!=null) child.add(node.left);
    43. }
    44. if(parent.isEmpty()){
    45. leftToRight = !leftToRight;
    46. parent = child;
    47. child = new Stack<>();
    48. output.add(level);
    49. level = new ArrayList<>();
    50. }
    51. }
    52. return output;
    53. }
    54.  
    55. public static void main(String args[]){
    56. TreeNode root = new TreeNode(1);
    57. root.left = new TreeNode(2);
    58. root.right = new TreeNode(3);
    59. root.left.left = new TreeNode(4);
    60. root.left.right = new TreeNode(5);
    61. root.right.left = new TreeNode(6);
    62. root.right.right = new TreeNode(7);
    63.  
    64. System.out.print(new Solution().zigzagLevelOrder(root));
    65.  
    66. }
    67.  
    68. }