¿Cómo puedo crear un árbol binario desequilibrado que se bifurque hacia la derecha?

¿Cómo puedo crear un árbol binario desequilibrado que se bifurque hacia la derecha?

Una imagen de lo que quiero:

Imgur

Para aquellos que estén interesados: esta cifra en particular está tomada deEste artículo(No pude encontrar una versión disponible gratuitamente) y muestrak-cubos(los cuadrados) que cubren un prefijo cada vez más grande de un espacio de identificación binario.

Le agradecería mucho si alguien pudiera darme una sugerencia sobre cómo puedo hacer este tipo de árbol:

  • Cada hoja es un cubo/cuadrado.
  • Sólo las hojas tienen cubos.
  • El árbol se bifurca hacia la derecha, dejando a cada rama la mitad de espacio que la anterior.

Editar

He modificado un poco algunos de los números en la brillante respuesta de Gonzalo Medina para acercarme exactamente a lo que quiero, pero debo confesar que no tengo idea de lo que está pasando ni de cómo funciona el código.

Lo que me gustaría ahora es ensanchar el árbol para que las cajas no se superpongan en el eje vertical.

\begin{forest}
for tree={parent anchor=south, child anchor=north},
s sep=30pt,
[
  [,draw,text width=4cm,edge label={node[midway,left=12pt]{$1$}}]
  [,shape=coordinate,edge label={node[midway,right=10pt]{$0$}}
    [,draw,text width=2cm,edge label={node[midway,left=4pt]{$1$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=4pt]{$0$}}
      [,draw,text width=0.5cm,edge label={node[midway,left]{$1$}}]
      [,draw,text width=0.5cm,edge label={node[midway,right]{$0$}}]
    ]
  ]
]
\end{forest}

Imgur

Además, ¿dónde lo pondría si quisiera texto dentro de algunos de los cuadros?

Respuesta1

con los poderososforestpaquete:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
s sep=30pt,
[
  [,draw,text width=3cm,edge label={node[midway,left=4pt]{$0$}}]
  [,shape=coordinate,edge label={node[midway,right]{$1$}}
    [,draw,text width=2cm,edge label={node[midway,left]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right]{$1$}}
      [,draw,text width=1cm,edge label={node[midway,left]{$0$}}]
      [,draw,text width=1cm,edge label={node[midway,right]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

ingrese la descripción de la imagen aquí

Usando los valores para l, l sep(para distancia vertical), s sep(para distancia horizontal) puede cambiar la geometría del árbol (consulte la documentación del paquete para obtener una explicación sobre esas claves). Un pequeño ejemplo::

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
for tree={l =-0ex}
[,s sep=3cm
  [,draw,text width=3cm,edge label={node[midway,above left=0pt]{$0$}}]
  [,s sep=1.5cm,shape=coordinate,edge label={node[midway,above right]{$1$}}
    [,draw,text width=2cm,edge label={node[midway,left=8pt]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=8pt]{$1$}}
      [,draw,text width=1cm,edge label={node[midway,left=6pt]{$0$}}]
      [,draw,text width=1cm,edge label={node[midway,right=6pt]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

ingrese la descripción de la imagen aquí

Si los cuadros deben tener texto, es mejor definirles un estilo para asegurarse de que todos tengan la misma altura:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
myempty/.style={
  draw,
  text width=#1,
  minimum height=16pt,
  anchor=north
  }
}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
for tree={l =2ex}
[,s sep=1cm
  [texta,myempty=3cm,edge label={node[midway,above left=0pt]{$0$}}]
  [,s sep=1cm,shape=coordinate,edge label={node[midway,above right]{$1$}}
    [textb,myempty=2cm,edge label={node[midway,left=8pt]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=8pt]{$1$}}
      [textc,myempty=1cm,edge label={node[midway,left=6pt]{$0$}}]
      [textd,myempty=1cm,edge label={node[midway,right=6pt]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada