\usetikzlibrary[topaths, calc] \begin{tikzpicture}[transform shape] % \def\dist{1.5} % \def\power{3} \pgfmathparse{\power-1} \newcount\powerleq \let\powerleq\pgfmathresult \pgfmathparse{int(2^\power)} \newcount\blocksize \let\blocksize\pgfmathresult \pgfmathparse{\blocksize-1} \newcount\blockleq \let\blockleq\pgfmathresult \foreach \j in {0,...,\powerleq}{ \pgfmathparse{int(\j+1)} \let\drow\pgfmathresult \pgfmathparse{int(2^(\j+1))} \let\ccsize\pgfmathresult \pgfmathparse{int(\ccsize/2)} \let\cchalf\pgfmathresult \foreach \i in {0,...,\blockleq}{ \pgfmathparse{int(mod(\i,2))} \let\n\pgfmathresult \pgfmathparse{int(\ccsize * int(\i / \ccsize))} \let\dblock\pgfmathresult \pgfmathparse{\dblock + int(mod(\i, \ccsize) / 2) + \cchalf}%(\ccsize * int(\i / \ccsize)) + int(mod(2* (\i + \cchalf), \ccsize)) + 1} \let\dest\pgfmathresult \path (\dist*\j, \i) edge (\dist*\drow, \dest); \ifnum\n=0 \path (\dist*\j, \i) edge [dashed] (\dist*\drow, \dest-\cchalf); \fi } } \foreach \i in {0,...,\blockleq}{ \node[draw=none] at (-0.3, \blockleq-\i) {$u_{\i}$}; \node[draw=none] at (\dist*\power+0.3, \blockleq-\i) {$x_{\i}$}; } \end{tikzpicture}