public static void snakePrint(BinaryTreeNode root) { if(root == null) { return; } ArrayDeque<BinaryTreeNode> arrayDeque = new ArrayDeque(); arrayDeque.add(root); boolean flag = true; while(!arrayDeque.isEmpty()) { int size = arrayDeque.size(); if(flag) { for(int i=0;i<size;i++) { System.out.print(arrayDeque.peekFirst().value+" "); BinaryTreeNode tmp = arrayDeque.pollFirst(); if(tmp.left != null) { arrayDeque.addLast(tmp.left); } if(tmp.right != null) { arrayDeque.addLast(tmp.right); } } flag = flag ? false : true; } else { for(int i=0;i<size;i++) { System.out.print(arrayDeque.peekLast().value+" "); BinaryTreeNode tmp = arrayDeque.pollLast(); if(tmp.left != null) { arrayDeque.addLast(tmp.left); } if(tmp.right != null) { arrayDeque.addLast(tmp.right); } } flag = flag ? false : true; } } }