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;
            }
        }
    }