You've correctly identified the fact that each individual triangle is contractible, and strong deformation retracts to its "base".
The key thing here is that if you just do the retraction on each triangle, the result isn't continuous, because the sequence of "bristles" on each triangle approach the base of another triangle, so if you start sliding down the bristles without also moving the base, you're essentially "ripping" the structure. I'll leave it as an exercise for you to prove this rigorously.
Fortunately, there's a solution: Slide the base as well! Simply move every point in the base along the zigzag to the right at the same speed you're contracting the triangles. As points in the bristles reach the base, have them turn the corner and start sliding along the zigzag as well, and as points reach the end of one base have them turn the corner on the zigzag and continue to the right at the same speed.
Now there's no "ripping" happening, since each base is going in the same direction as the parallel bristles near it. One characterization I like of this homotopy is: "Each point has a preferred path out to infinity, just tell them to all start to marching."
Once you've moved everything a distance of 1, all the bristles will have been retracted into the zigzag and you've got yourself a "weak deformation retraction" from the full space to the zigzag, and you're done. Note that this isn't a true deformation retraction, since we only got it working by moving points in the zigzag itself, so the base wasn't fixed.
Proving this whole thing is continuous is pretty elementary, and can be done straight from the definitions of homotopy and continuous map, so I'll leave it to you to formalize. I'd recommend breaking it into cases: First show it's continuous for points along the bristles, then show it's continuous for points in the interior of the bases, and finally show it's continuous for points on the corners of the zigzag.
$S^m * S^n = (S^m \times S^n \times [0, 1])/\sim$ where $\sim$ identifies the top $S^m \times S^n \times \{0\}$ to $S^m$ and the bottom $S^m \times S^n \times \{1\}$ to $S^n$. Cutting this in half gives $$S^m * S^n = (S^m \times S^n \times [0, 1/2])/\!\!\sim \cup_{S^m \times S^n \times \{1/2\}}\; (S^m \times S^n \times [1/2, 1])/\!\!\sim$$
In the first piece, $\sim$ does nothing except pinching the copy of $S^m \times \{0\}$ to a point. Thus, the first piece is homeomorphic to $C(S^m) \times S^n \cong D^{m+1} \times S^n$. Similarly, $\sim$ just pinches the copy of $S^n \times \{0\}$ in the second piece, so that one is homeomorphic to $S^m \times C(S^n) \cong S^m \times D^{n+1}$. So the space is homeomorphic to
$$D^{m+1} \times S^n \cup_{S^m \times S^n} S^m \times D^{n+1} \cong D^{m+1} \times \partial(D^{n+1}) \cup_\partial \partial(D^{m+1}) \times D^{n+1} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\; \cong \partial(D^{m+1} \times D^{n+1}) \\ \;\;\;\;\;\;\ \cong \partial(D^{m+n+2})$$
Which is just $S^{m+n+1}$ $\blacksquare$
Best Answer
Consider the disjoint union $X = S^2 \coprod S^2$ of two 2-spheres, topologized so that every neighborhood of $p$ on the first sphere contains $q$ on the second sphere and vice versa. (We have "glued $p$ to $q$", but by putting them infinitesimally close together, rather than identifying them as we would have to if we wanted to stay Hausdorff.) This space is connected and it is the union of two 2-spheres which meet in at most one point (since they meet in zero points).
In this case I would guess that the map $X$ to $S^2 \vee S^2$ actually is a homotopy equivalence — you can define a candidate for the inverse by taking the first sphere to $S^2$ (sending the basepoint to $p$) and taking the second sphere minus the basepoint to $S^2 - q$ (note that this really is continuous). However it does provide an example of how our intuition can go wrong if we allow non-Hausdorff spaces.