\begin{tikzpicture}[node distance=1.5cm and 2cm] \node (start) [startstop] {Recorder: get\_next\_mutation(func)}; \node (checkcurrent) [decision, below of=start] {Current Node Has Untried Mutations?}; \node (addnode) [process, right=3.5cm of checkcurrent] {Add New Mutation Node}; \node (traverse) [process, below of=checkcurrent] {Traverse Children}; \node (foundchild) [decision, below of=traverse] {Child With Untried Mutations?}; \node (usechild) [process, left=3.5cm of foundchild] {Use Child Node}; \node (usenone) [process, right=3.5cm of foundchild] {Use NONE Node}; \node (mutate) [process, below of=foundchild, yshift=-2cm] {Mutate APDU and Send}; \node (record) [process, below of=mutate] {Recorder.record()}; \draw [arrow] (start) -- (checkcurrent); \draw [arrow] (checkcurrent.east) -- node[above] {Yes} (addnode.west); \draw [arrow] (addnode.south) |- (mutate); \draw [arrow] (checkcurrent) -- (traverse); \draw [arrow] (traverse) -- (foundchild); \draw [arrow] (foundchild.west) -- node[above] {Yes} (usechild.east); \draw [arrow] (foundchild.east) -- node[above] {No} (usenone.west); \draw [arrow] (usechild.south) |- (mutate); \draw [arrow] (usenone.south) |- (mutate); \draw [arrow] (mutate) -- (record); \end{tikzpicture}