Yes, You've got the idea:
motionPath1.uValue = (frame % $sizeOfCycle)/$sizeOfCycle;
when sizeOfCycle = frame tread jumps back to start.
Are You doing all this stuff through combining utility nodes like plusMinusAverage and multiplyDivide? If so, then I'd say that's insane and worthless, sorry. A single expression node will work quicker, easier to understand, manage, change, than jungle of nodes (even if named properly). Especially if You want to do random forward-backward movements of treaded vehicle.