编辑

编辑

我想添加一行第一次抛掷、第二次抛掷、第三次抛掷和结果,就像这张图片一样

在此处输入图片描述

我试过

\documentclass{standalone}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\tikzset{grow'=right}
\tikzset{execute at begin node=\strut}
\tikzset{every tree node/.style={anchor=base west}}
\Tree [ [.H [.H [.H ][.T ]][.T [.H ][.T ]] ] [.T [. H [.H ][.T ] ][.T [.H ] [.T ]] ]] 
\end{tikzpicture}
\end{document}

我得到了

在此处输入图片描述

答案1

这是一个forest自动添加标签以及节点内容和结果列表的解决方案。

自动树

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  /tikz/every node/.append style={font=\sffamily},
  toss/.style={
    before drawing tree={
      tikz/.wrap pgfmath arg={\node at ([yshift=10pt].center |- h.north) {Toss ##1};}{level()},
    }
  },
  tosses/.style={
    name=h,
    for ancestors'={if level=0{}{toss}},
    before packing={
      !1.tikz={\node at ([yshift=10pt].center |- h.north) {Outcomes};}
    }
  },
  for tree={
    grow'=0,
    parent anchor=east,
    child anchor=west,
    anchor=west,
    tier/.wrap pgfmath arg={tier #1}{level()},
    l sep+=20pt,
    font=\sffamily,
    delay={
      if level=0{}{
        if n=1{content=H}{content=T}
      }
    }
  },
  before typesetting nodes={
    where n children=0{
      append={[, edge={dashed}, anchor=west, font=\sffamily, content/.wrap 3 pgfmath args={(#1,#2,#3)}{content("!uuu")}{content("!uu")}{content("!u")}]}
    }{}
  }
  [
    [
      [
        [, tosses]
        []
      ]
      [
        []
        []
      ]
    ]
    [
      [
        []
        []
      ]
      [
        []
        []
      ]
    ]
  ]
\end{forest}
\end{document}

简介forest在我的回答的第二部分可以找到这里

此处配置的复杂性仅归因于自动化,它依赖于在绘制过程的特定阶段执行特定操作。实际的树规范很简单。

[实际上它只是一堆方括号,一个逗号和字符串tosses。还有什么比这更简单的?!]

编辑

您可以调整树序言中的节点和标签的内容。我添加了三条注释来突出显示应执行此操作的点,并用圆圈和实心圆圈代替pifontH 和 T 来说明这个想法。由于这可能使“掷球”不合适,我还将标签前缀更改为“球”。

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest,pifont}
\begin{document}
\begin{forest}
  /tikz/every node/.append style={font=\sffamily},
  toss/.style={
    before drawing tree={% specify the prefix of the labels at the top here
      tikz/.wrap pgfmath arg={\node at ([yshift=10pt].center |- h.north) {Ball ##1};}{level()},
    }
  },
  tosses/.style={
    name=h,
    for ancestors'={if level=0{}{toss}},
    before packing={% specify the label for the final (rightmost) level here
      !1.tikz={\node at ([yshift=10pt].center |- h.north) {Outcomes};}
    }
  },
  for tree={
    grow'=0,
    parent anchor=east,
    child anchor=west,
    anchor=west,
    tier/.wrap pgfmath arg={tier #1}{level()},
    l sep+=20pt,
    font=\sffamily,
    delay={
      if level=0{}{% specify the contents of the nodes here
        if n=1{content=\ding{109}}{content=\ding{108}},
      }
    }
  },
  before typesetting nodes={
    where n children=0{
      append={[, edge={dashed}, anchor=west, font=\sffamily, content/.wrap 3 pgfmath args={(#1,#2,#3)}{content("!uuu")}{content("!uu")}{content("!u")}]}
    }{}
  }
  [
    [
      [
        [, tosses]
        []
      ]
      [
        []
        []
      ]
    ]
    [
      [
        []
        []
      ]
      [
        []
        []
      ]
    ]
  ]
\end{forest}
\end{document}

用白球或黑球代替硬币

答案2

考虑到您所做的工作,最简单的方法是使用 TikZ 的机制绘制两棵树,一棵在另一棵之上scope。我增加了除最后一个分支之外的树枝的水平距离以容纳标签,并手动将标签树向左移动以更好地对齐标签。

\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\tikzset{grow'=right}
\tikzset{execute at begin node=\strut}
\tikzset{every tree node/.style={anchor=base west}, level distance=1in,level 4+/.style={level distance=.5in,edge from parent/.append style={dashed}}}
\Tree [ 
    [.H 
        [.H 
            [.H [.{(H,H,H)} ]]
            [.T [.{(H,H,T)} ]]]
        [.T 
            [.H [.{(H,T,H)} ]]
            [.T [.{(H,T,T)} ]]]] 
    [.T 
        [.H 
            [.H [.{(T,H,H)} ]]
            [.T [.{(T,H,T)} ]]]
        [.T 
            [.H [.{(T,T,H)} ]] 
            [.T [.{(T,T,T)} ]]]]
    ]
\begin{scope}[xshift=-1cm,yshift=4.5cm, edge from parent/.style={draw=none},align=center,level 4+/.style={level distance=.8in}]
\Tree [.{} [.{First Toss} [.{Second Toss} [.{Third Toss} [.{Outcomes} ]  ] ] ] ]
\end{scope}
\end{tikzpicture}
\end{document}

对于类似的问题,请参见:如何将标题与用 tikz-qtree 绘制的树的每一级对齐?

代码输出

相关内容