Cómo dibujar una línea horizontal que abarque el ancho de la imagen, detrás de todos los elementos

Cómo dibujar una línea horizontal que abarque el ancho de la imagen, detrás de todos los elementos

Estoy intentando copiar esta imagen:

ingrese la descripción de la imagen aquí

Y esto es lo que tengo hasta ahora (el espaciado es diferente pero está bien):

ingrese la descripción de la imagen aquí

Todo lo que necesito hacer es agregar la línea horizontal en el medio de la figura, en la profundidad 2, detrás de todos los nodos. Aquí está mi código:

\begin{tikzpicture}
\begin{scope}[auto, every node/.style={draw,circle,minimum size=2em,inner sep=1, font=\footnotesize}]

\node (1) [circle, draw, fill=lightgray] at (0,0) {};

\node (2) [circle, draw, fill=lightgray, below left=of 1, shift={(-1,0)}] {};
\draw[->](1)--(2);

    \node (4) [circle, draw, fill=lightgray, below left=of 2, shift={(0,0)}] {};
    \draw[->](2)--(4);

        \node (3) [circle, draw, fill=lightgray, below left=of 4, shift={(-.5,-1)}]  {0};
        \draw[dashed, ->](4)--(3);

        \node (6) [circle, draw, fill=lightgray, right=of 3, shift={(-1,0)}]  {100};
        \draw[dashed, ->](4)--(6);

        \node (7) [circle, draw, fill=lightgray, right=of 6, shift={(-1,0)}]  {100};
        \draw[dashed, ->](4)--(7);

        \node (8) [circle, draw, fill=lightgray, right=of 7, shift={(-1,0)}]  {0};
        \draw[dashed, ->](4)--(8);

    \node (5) [circle, draw, fill=lightgray, below right=of 2, shift={(0,0)}] {};
    \draw[->](2)--(5);
         \node (9) [circle, draw, fill=lightgray, below left=of 5, shift={(-.5,-1)}]  {100};
         \draw[dashed, ->](5)--(9);

        \node (10) [circle, draw, fill=lightgray, right=of 9, shift={(-1,0)}]  {0};
        \draw[dashed, ->](5)--(10);

        \node (11) [circle, draw, fill=lightgray, right=of 10, shift={(-1,0)}]  {0};
        \draw[dashed, ->](5)--(11);

        \node (12) [circle, draw, fill=lightgray, right=of 11, shift={(-1,0)}]  {0};
        \draw[dashed, ->](5)--(12);

\node (13) [circle, draw, fill=lightgray, below right=of 1, shift={(1,0)}] {};
\draw[->](1)--(13);

    \node (14) [circle, draw, fill=lightgray, below left=of 13, shift={(0,0)}] {};
    \draw[->](13)--(14);

        \node (16) [circle, draw, fill=lightgray, below right=of 14, shift={(.5,-1)}]  {0};
        \draw[dashed, ->](14)--(16);

        \node (17) [circle, draw, fill=lightgray, left=of 16, shift={(1,0)}]  {0};
        \draw[dashed, ->](14)--(17);

        \node (18) [circle, draw, fill=lightgray, left=of 17, shift={(1,0)}]  {0};
        \draw[dashed, ->](14)--(18);

        \node (19) [circle, draw, fill=lightgray, left=of 18, shift={(1,0)}]  {0};
        \draw[dashed, ->](14)--(19);

    \node (15) [circle, draw, fill=lightgray, below right=of 13, shift={(0,0)}] {};
    \draw[->](13)--(15);

        \node (20) [circle, draw, fill=lightgray, below right=of 15, shift={(.5,-1)}]  {100};
         \draw[dashed, ->](15)--(20);

        \node (21) [circle, draw, fill=lightgray, left=of 20, shift={(1,0)}]  {0};
        \draw[dashed, ->](15)--(21);

        \node (22) [circle, draw, fill=lightgray, left=of 21, shift={(1,0)}]  {100};
        \draw[dashed, ->](15)--(22);

        \node (23) [circle, draw, fill=lightgray, left=of 22, shift={(1,0)}]  {100};
        \draw[dashed, ->](15)--(23);
\end{scope}
\end{tikzpicture}

¿Cómo puedo agregar esa línea?

Respuesta1

en el preámbulo

\usetikzlibrary{backgrounds}

Al final de la imagen

\scoped[on background layer]{\draw (current bounding box.west) -- (current bounding box.east);}

Por ejemplo.

En el caso de un árbol, por ejemplo, haría algo como esto:

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{forest}
  for tree={
    circle,
    minimum size=25pt,
    draw,
    fill=lightgray,
    font=\small\sffamily,
    l sep+=10pt,
    edge={->}
  },
  where n children=0{
    tier=terminus,
    +edge=densely dashed,
  }{
    if level=2{
      tikz+={
        \scoped[on background layer]{\path [line width=1pt, draw=lightgray, line cap=round] (current bounding box.west |- .center) -- (current bounding box.east |- .center);}
      }
    }{}
  }
  [
    [
      [
        [0]
        [100]
        [100]
        [0]
      ]
      [
        [100]
        [0]
        [0]
        [0]
      ]
    ]
    [
      [
        [0]
        [0]
        [0]
        [0]
      ]
      [
        [100]
        [100]
        [0]
        [100]
      ]
    ]
  ]
\end{forest}
\end{document}

ejemplo de árbol

No necesariamente deseas utilizar forest, pero utilizar alguna función de dibujo de árboles simplificará enormemente la tarea. Incluso si solo usa el material de árbol integrado de TikZ o la treesbiblioteca, aunque la especificación de su árbol será mucho menos concisa que la mía en la sintaxis de Forest, seguirá siendo menos detallada y más fácil de mantener que colocar todo manualmente.

información relacionada