Here's mine. Despite my comments, this is, in fact, pure TikZ without any of the graphs
stuff. That is, you can compile it with LaTeX, pdfLaTeX or whatever and it should work. (You can presumably convert it into a TeX version, should you so wish.) I planned to use graphs
to draw the connections, which doesn't need LuaTeX anyway. But, somehow, I never got around to it as, once I'd placed the nodes, this seemed easier.
Change the maximum value for the outer loop to increase the number of levels. I practised with values of 3 and 4, but use 5 for the 'display' version here. The complication is that the first node gets 3 children, in order to have degree 3, while later nodes of degree 3 only need 2, because they have a parent. This requires special treatment of the first 3 levels to get things to line up correctly. After that, subsequent levels are just a question of TeX capacity and your patience.
Use \showtrue
to draw a labelled version, for debugging purposes.
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\newif\ifshow\showfalse % set true to debug
\begin{document}
\begin{tikzpicture}
% \i: level \s: shape \a: angle \t: turn \d: degree -1 \j: number \m: rotation \g: group \k: number \c: colour
\def\j{1}\def\dlast{1}\def\tlast{0}
\foreach \i [remember=\i as \ilast] in {0,...,5}
{
\draw [darkgray] (0,0) circle (\i cm);
\pgfmathsetmacro\a{360/\j}
\ifodd\i\def\s{}\def\c{magenta}\def\d{4}\pgfmathsetmacro\t{\tlast-1.5*\a}\else\def\c{blue!50!cyan}\def\s{circle}\def\d{2}\pgfmathsetmacro\t{\tlast-2.5*\a}\fi
\ifnum\i=1\pgfmathsetmacro\t{-\a}\fi
\ifnum\i=0\def\d{3}\def\t{0}\fi
\foreach \k [evaluate=\k as \m using {(\k*\a)+\t}, evaluate=\k as \g using {int((floor((\k-1)/\dlast)))}, count=\n from 0 ] in {1,...,\j}
{
\ifshow\def\tempa{n-\i-\g-\n:\k}\else\let\tempa\relax\fi
\node (n-\i-\n) [draw, fill, \c, \s, minimum size=2.5pt, inner sep=0pt, label={[font=\tiny]{\tempa}} ] at (\m:\i cm) {};
\ifnum\i>0 \draw [darkgray] (n-\i-\n) -- (n-\ilast-\g); \fi
}
\pgfmathsetmacro\j { \j*\d }
\global\let\j\j
\global\let\dlast\d
\pgfmathsetmacro\tlast{(\i==1) ? 0 : (\t+\a) }
\global\let\tlast\tlast
}
\end{tikzpicture}
\end{document}

Here's a more parametized version, with (optional) special effects.
circle colour=<colour>
will give a uniform colour for the circles;
circle colours=<colour>:<colour>
will give shades varying between the two colours for the circles;
square colour=<colour>
will give a uniform colour for the circles;
square colours=<colour>:<colour>
will give shades varying between the two colours for the squares;
circle degree=<integer>
sets the degree for the circular nodes;
square degree=<integer>
sets the degree for the square nodes;
connection colour<colour>
sets the colour for the circles and the background;
levels=<integer>
sets the number of levels.
If you don't want the background, just delete the line
\scoped[on background layer]{\shade [inner color=lcol!5, outer color=lcol!35] circle (\l cm);}
In that case, you don't need the backgrounds
library and can delete
\usetikzlibrary{backgrounds}
if you don't need it for anything else.
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\newif\ifshow\showfalse % set true to debug
\begin{document}
\begin{tikzpicture}
% \i: level \s: shape \a: angle \t: turn \d: degree -1 \j: number \m: rotation \g: group \k: number ncol: colour
\tikzset{
circle degree/.code={\def\dr{#1}\pgfmathsetmacro\dc{int(#1-1)}\pgfmathsetmacro\tc{((\dc-1)/2)+1}},
square degree/.code={\pgfmathsetmacro\ds{int(#1-1)}\pgfmathsetmacro\ts{((\ds-1)/2)+1}},
levels/.code={\pgfmathsetmacro\l{int(#1-1)}},
connection colour/.code={\colorlet{lcol}{#1}},
circle colours/.code args={#1:#2}{\colorlet{ccol1}{#1}\colorlet{ccol2}{#2}},
square colours/.code args={#1:#2}{\colorlet{scol1}{#1}\colorlet{scol2}{#2}},
circle colour/.style={circle colours=#1:#1},
square colour/.style={square colours=#1:#1},
circle degree=3,
square degree=5,
levels=6,
connection colour=darkgray,
square colours=green:blue,
circle colours=blue:magenta,
}
\def\j{1}\def\dlast{1}\def\tlast{0}
\foreach \i [remember=\i as \ilast] in {0,...,\l}
{
\draw [lcol] (0,0) circle (\i cm);
\pgfmathsetmacro\a{360/\j}
\pgfmathsetmacro\z{6.5-\i*.8}
\ifodd\i\def\s{}\colorlet{ncol1}{scol1}\colorlet{ncol2}{scol2}\let\d\dc\pgfmathsetmacro\t{\tlast-\ts*\a}\else\colorlet{ncol1}{ccol1}\colorlet{ncol2}{ccol2}\def\s{circle}\let\d\ds\pgfmathsetmacro\t{\tlast-\tc*\a}\fi
\ifnum\i=1\pgfmathsetmacro\t{-\a}\fi
\ifnum\i=0\let\d\dr\def\t{0}\fi
\foreach \k [evaluate=\k as \m using {(\k*\a)+\t}, evaluate=\k as \g using {int((floor((\k-1)/\dlast)))}, count=\n from 0, evaluate=\k as \p using { (\k > \j/2) ? ((1-\k/\j)*200) : ((200/\j)*\k)} ] in {1,...,\j}
{
\ifshow\def\tempa{n-\i-\g-\n:\k}\else\let\tempa\relax\fi
\node (n-\i-\n) [draw, fill, ncol1!\p!ncol2, \s, minimum size=\z pt, inner sep=0pt, label={[font=\tiny]{\tempa}} ] at (\m:\i cm) {};
\ifnum\i>0 \draw [ncol1!\p!ncol2] (n-\i-\n) -- (n-\ilast-\g); \fi
}
\pgfmathsetmacro\j { \j*\d }
\global\let\j\j
\global\let\dlast\d
\pgfmathsetmacro\tlast{(\i==1) ? 0 : (\t+\a) }
\global\let\tlast\tlast
}
\scoped[on background layer]{\shade [inner color=lcol!5, outer color=lcol!35] circle (\l cm);}
\end{tikzpicture}
\end{document}

\usetikzlibrary{trees}
see Example: Title graphics. If you need further help add a mwe.LuaLaTeX
. With plaintikz
it's possible, but too painful for me.