Here is a solution using forest
.
It makes no sense to use a float in this context, so the tabulars cannot benefit from the automatic numbering of the table
environment. However, you can arrange to have them numbered automatically and added to the list of tables. To do this, you need to be a little careful when the counter is incremented and when the contents line written. In the code below, this is done when the label itself is typeset.
The tabulars are placed in regular nodes, just surrounded by curly brackets.
The dashed line and level labels are added after the tree is drawn. The name
key provided by forest
is used to help with positioning, and a brace
TiKZ decoration is used for the lines required here. calc
is used to compute positions for the level labels themselves.
\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\usetikzlibrary{decorations.pathreplacing,calc}
\begin{document}
\forestset{
my level/.style={
where n=1{
name/.wrap pgfmath arg={level ##1}{level()},
}{},
},
my circle/.style={
shape=circle,
fill,
minimum size=1.5pt,
inner sep=0pt,
outer sep=0pt,
},
my tabular/.style={
no edge,
for children={
edge={draw, ->},
},
for parent={
l sep=0pt,
for tree={
fit=band,
},
for parent={
calign=child,
calign child=2,
},
},
->,
},
my tabular label/.style={
label={\stepcounter{table}\addcontentsline{lot}{table}{\numberline {\thetable}{\ignorespaces Table \thetable}}\footnotesize Table \thetable},
},
/tikz/my label/.style={
font=\scriptsize,
midway,
},
}
\begin{forest}
for tree={
grow=east,
parent anchor=east,
child anchor=west,
anchor=center,
align=center,
where level=0{
draw,
}{
my level,
},
}
[Text, name=my root, l sep+=10pt
[, my circle, edge label={node [my label, below] {\dots}}]
[, my circle]
[, my circle
[, my circle, edge label={node [my label, below] {\dots}}]
[, my circle]
[, my circle
[{\begin{tabular}{|c|c|c|}
\hline
aaa & bbb & ccc\\\hline
& & \\\hline
& & \\\hline
\end{tabular}}, my tabular, my tabular label
[{\begin{tabular}{|c|c|c|}
\hline
aaa & bbb & ccc\\\hline
& & \\\hline
& & \\\hline
\end{tabular}}, my tabular label
]
]
]
]
]
\path [draw, dashed] (level 1.center |- current bounding box.north) +(0,10pt) -- (level 1.center |- current bounding box.south) -- +(0,-10pt) coordinate (bot);
\path [draw, decoration=brace, decorate]
(level 1.west |- bot) coordinate (c1) -- (my root.east |- bot) coordinate (c2) ;
\path [draw, decoration=brace, decorate]
(level 2.west |- bot) coordinate (c3) -- (level 1.east |- bot) coordinate (c4);
\node [anchor=north] at ($(c1)!1/2!(c2)$) {Text};
\node [anchor=north] at ($(c3)!1/2!(c4)$) {Text};
\end{forest}
\listoftables
\end{document}
