def diagonal_zigzag(matrix):
    if not matrix or not matrix[0]:
        return []
    rows, cols = len(matrix), len(matrix[0])
    output = []
    for diagonal in range(rows + cols - 1):
        first = max(0, diagonal - cols + 1)
        last = min(rows - 1, diagonal)
        values = [matrix[r][diagonal - r] for r in range(first, last + 1)]
        if diagonal % 2 == 0:
            values.reverse()
        output.extend(values)
    return output
