public int minDepth(TreeNode root) {
        if(root == null) return 0;
        LinkedList<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(root);
        que.offer(null);

        int res = Integer.MAX_VALUE;
        int dep = 0;
        while(!que.isEmpty()){
            TreeNode n = que.poll();
            if(n == null){
                ++dep;
                if(que.isEmpty()) break;
                que.offer(n);
            }else{
                if(n.left == null && n.right == null){
                    res = Math.min(res, dep+1);
                }
                if(n.left != null) que.offer(n.left);
                if(n.right != null) que.offer(n.right);
            }
        }
        return res;
    }