尝试绘制递归树时出错?

尝试绘制递归树时出错?

以下是代码:

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
   draw,
   align=center
}
[TowersOfHanoi\left 4, 1, 3, 2\right
[TowersOfHanoi\left 3, 1, 2, 3\right
  [TowersOfHanoi\left 2, 1, 3, 2\right
    [TowersOfHanoi\left 1, 1, 2, 3\right]
    [TowersOfHanoi\left 1, 2, 3, 1\right]
  ]
  [TowersOfHanoi\left 2, 3, 2, 1\right
    [TowersOfHanoi\left 1, 3, 1, 2\right]
    [TowersOfHanoi\left 1, 1, 2, 3\right]
  ]
]
[TowersOfHanoi\left 3, 2, 3, 1\right
  [TowersOfHanoi\left 2, 2, 1, 3\right
    [TowersOfHanoi\left 1, 2, 3, 1\right]
    [TowersOfHanoi\left 1 ,3, 1, 2\right]
  ]
  [TowersOfHanoi\left 2, 1, 3, 2\right
    [TowersOfHanoi\left 1, 1, 2, 3\right]
    [TowersOfHanoi\left 1, 2, 3, 1\right]
  ]
 ]
]
\end{forest}
\end{document}

错误信息如下:

! 缺少 \endcsname 插入。
待重读
\right
l.32 \end{forest}

我究竟做错了什么?


注意:上面的代码是这个代码的一个稍微修改的版本基准代码重现了该图画。

答案1

首先是逗号。逗号表示节点文本结束,后面是与其相关的选项。要在节点文本中使用逗号,请将其括在括号中。

其次,\left/ \right。它们需要数学模式,并且它们后面还需要一个分隔符,你忘记了这一点。不过,我会将它们全部删除,然后只插入(/ )\left .. \right当它们之间只有数字时,就不需要了。

正如下面的评论所述,align=center它在这里实际上没有什么用处,所以除非您打算添加换行符,否则它可以被删除。

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
   draw
}
[{TowersOfHanoi(4, 1, 3, 2)}
[{TowersOfHanoi(3, 1, 2, 3)}
  [{TowersOfHanoi(2, 1, 3, 2)}
    [{TowersOfHanoi(1, 1, 2, 3)}]
    [{TowersOfHanoi(1, 2, 3, 1)}]
  ]
  [{TowersOfHanoi(2, 3, 2, 1)}
    [{TowersOfHanoi(1, 3, 1, 2)}]
    [{TowersOfHanoi(1, 1, 2, 3)}]
  ]
]
[{TowersOfHanoi(3, 2, 3, 1)}
  [{TowersOfHanoi(2, 2, 1, 3)}
    [{TowersOfHanoi(1, 2, 3, 1)}]
    [{TowersOfHanoi(1 ,3, 1, 2)}]
  ]
  [{TowersOfHanoi(2, 1, 2, 2)}
    [{TowersOfHanoi(1, 1, 2, 3)}]
    [{TowersOfHanoi(1, 2, 3, 1)}]
  ]
 ]
]
\end{forest}
\end{document}

也就是说,当你写入TowersOfHanoi每个节点时,你的树会变得非常宽。也许你可以考虑将其缩写为ToH,或者完全省略它。

\documentclass[tikz,border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
   draw,
}
[{ToH(4, 1, 3, 2)},label={above:ToH = TowersOfHanoi}
[{ToH(3, 1, 2, 3)}
  [{ToH(2, 1, 3, 2)}
    [{ToH(1, 1, 2, 3)}]
    [{ToH(1, 2, 3, 1)}]
  ]
  [{ToH(2, 3, 2, 1)}
    [{ToH(1, 3, 1, 2)}]
    [{ToH(1, 1, 2, 3)}]
  ]
]
[{ToH(3, 2, 3,1)}
  [{ToH(2, 2, 1, 3)}
    [{ToH(1, 2, 3, 1)}]
    [{ToH(1, 3, 1, 2)}]
  ]
  [{ToH(2, 1, 2, 2)}
    [{ToH(1, 1, 2, 3)}]
    [{ToH(1, 2, 3, 1)}]
  ]
 ]
]
\end{forest}

\begin{forest}
for tree={
   draw,
}
[{(4, 1, 3, 2)},label={above:Arguments to TowersOfHanoi}
[{(3, 1, 2, 3)}
  [{(2, 1, 3, 2)}
    [{(1, 1, 2, 3)}]
    [{(1, 2, 3, 1)}]
  ]
  [{(2, 3, 2, 1)}
    [{(1, 3, 1, 2)}]
    [{(1, 1, 2, 3)}]
  ]
]
[{(3, 2, 3,1)}
  [{(2, 2, 1, 3)}
    [{(1, 2, 3, 1)}]
    [{(1, 3, 1, 2)}]
  ]
  [{(2, 1, 2, 2)}
    [{(1, 1, 2, 3)}]
    [{(1, 2, 3, 1)}]
  ]
 ]
]
\end{forest}
\end{document}

相关内容