Produzindo árvore "infinita" usando qtree

Produzindo árvore "infinita" usando qtree

Estou tentando produzir uma árvore com infinitos galhos em cada nível, significa que de cada 'estágio' existem três galhos sem texto e três pontos no final de cada galho. Infelizmente, quando tento executar o seguinte código:

`\Tree 
    [.\quad 
        [.{ \quad}(\dots)
    {\dots} ]
    {\ldots} ]`

Eu recebo a seguinte saída:

insira a descrição da imagem aqui


Quero criar pelo menos 3 filiais em cada etapa. Como posso criar minha árvore desejada?

Responder1

Por favor, inclua sempre um exemplo mínimo de trabalho, como David Carlisle mencionou.

Já que é uma árvore, por que não construir uma forest?

árvore pontilhada

Esta árvore pode ser composta usando código extremamente compacto porque forestsuporta 'árvores dinâmicas'. Este exemplo é baseado nas informações e exemplos nas páginas 40-41 do manual.

\documentclass[tikz]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
  [\dots,
    repeat=3{
      append={
        [\dots, repeat=3{
          append={[\dots]}
        }]
      },
    },
    before typesetting nodes={
      for children={
        for children={
          repeat=3{
            append={
              [\dots, repeat=3{
                append={[\dots]}
              }]
            },
          },
        }
      }
    }
  ]
\end{forest}
\end{document}

Em vez de usar before typesetting nodes, você também pode adicionar mais appendcomandos diretamente:

\begin{forest}
  [\dots,
    repeat=3{
      append={
        [\dots,
          repeat=3{
            append={
              [\dots,
                repeat=3{
                  append={
                    [\dots,
                      repeat=3{
                        append={
                          [\dots]
                        }
                      }
                    ]
                  }
                },
              ]
            }
          }
        ]
      },
    },
  ]
\end{forest}

mas acho mais difícil analisar o código quando isso é feito assim.

Responder2

Pode ser mais fácil simplesmente desenhar algo no tikzpicture que seja mais flexível para, por exemplo, fazer com que os nós mais adiante sejam menores, para dar uma melhor impressão de ramificação infinita.

Aqui está um exemplo.

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning}

\usepackage{mathtools}
\DeclarePairedDelimiter{\seq}{\langle}{\rangle}


\begin{document}
\begin{tikzpicture}
\node (empty) {$\seq{}$};

%above empty - layer 1
\node (0) [above left = 1cm and 2cm of empty] {$\seq{0}$};
\node (1) [right=3cm of 0,scale=.9] {$\seq{1}$};
\node (2) [right=2 cm of 1,scale=.8] {$\seq{2}$};
\node (3) [right=1cm of 2,scale=.7] {$\seq{3}$};
\node (4) [right=.8 cm of 3,scale=.6] {$\seq{4}$};
\node (ldots) [right=.5cm of 4] {$\ldots$};

\draw (empty)--(0);
\draw (empty)--(1);
\draw (empty)--(2);
\draw (empty)--(3);
\draw (empty)--(4);
\node (ldotsline) [below=.5cm of 3] {$\ldots$};



%above 0 - layer 2
\node (00) [above left = 1cm and 2cm of 0,scale=.9] {$\seq{0,0}$};
\node (01) [right=.8cm of 00,scale=.8] {$\seq{0,1}$};
\node (02) [right=.6 cm of 01,scale=.6] {$\seq{0,2}$};
\node (03) [right=.4cm of 02,scale=.4] {$\seq{0,3}$};
\node (0ldots) [right=0cm of 03] {$\ldots$};

\draw (0)--(00);
\draw (0)--(01);
\draw (0)--(02);
\draw (0)--(03);
\node (0ldotsline) [below=.5cm of 03] {$\ldots$};


%above 1 - layer 2
\node (10) [right = .5cm of 0ldots,scale=.8] {$\seq{1,0}$};
\node (11) [right=.8cm of 10,scale=.6] {$\seq{1,1}$};
\node (12) [right=.6 cm of 11,scale=.4] {$\seq{1,2}$};
\node (1ldots) [right=.2cm of 12] {$\ldots$};

\draw (1)--(10);
\draw (1)--(11);
\draw (1)--(12);


%above 00 - layer 3
\node (000) [above left = .3cm and .5cm of 00,scale=.6] {$\seq{0,0,0}$};
\node (001) [right=.8cm of 000,scale=.6] {$\seq{0,0,1}$};
\node (00ldots) [right=.2cm of 001,scale=.8] {$\ldots$};

\draw (00)--(000);
\draw (00)--(001);


% continuing dots
\node (vdots11) [above=.5cm of 11] {$\vdots$};
\node (vdots02) [above=.5cm of 02] {$\vdots$};
\node (vdots4) [above=1cm of 4] {$\vdots$};
\node (vdots000) [above=.3cm of 000] {$\vdots$};
\node (vdots001) [above=.3cm of 001] {$\vdots$};
\node (ldots2) [above right=.3cm and .3cm of 2] {$\ldots$};
\end{tikzpicture}
\end{document}

O que produz:insira a descrição da imagem aqui

Pode haver uma maneira mais rápida de fazer isso, por exemplo, com \foreach.

informação relacionada