我想在二叉树中与子节点和父节点没有明确关系的节点之间添加额外的边,并改变边的样式。
目前我有以下代码:
\documentclass[a4paper,12pt]{article}
\usepackage{tikz}
\title{}
\begin{document}
\maketitle
\begin{center}
\begin{tikzpicture}[
every node/.style = {minimum width = 2em, draw, circle},
level/.style = {sibling distance = 30mm/#1}
]
\node{u.p}
child {node {u}
child{node {u.e}}
child {edge from parent[draw = none]}
}
child {node {u.p.d}};
\end{tikzpicture}
\end{center}
\end{document}
这给了我以下输出:
现在,我想要的输出是在你和向上以及之间你和韋还有一个额外的边缘连接韋到向上,如果可能的话用红色表示,即如下所示:
提前感谢任何帮助。
答案1
我建议您使用该forest
包,这使得这些修改相对容易。
如果您希望节点大小不同,则可以删除该minimum width
设置。对于红色弧线,如果您希望它从节点的“西”出来u.p
,您可以尝试\draw[red](up.west) to[bend right] (ue);
。否则,您可以按照以下代码调整松散度,或者像普通 tikz 线一样使用out=
和。in=
在 中forest
,兄弟距离由 控制s sep=
,代距离由 控制l sep=
。可以通过调整单个节点的真实x
和y
坐标将其从计算位置移开,就像我对节点所做的那样u.e
。否则它将被直接放置在u
节点下方。
要绘制额外的边和name
节点,然后使用普通的 tikz 绘图命令。
以下是代码:
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={draw, circle, inner sep=2pt, minimum width=1cm, font=\small, s sep=1cm}
[u.p, name=up
[u,edge=dashed
[u.e, edge=dashed, before drawing tree={x-=1cm}, name=ue]]
[u.p.d]]
\draw[red](up) to[bend right, looseness=1.5] (ue);
\end{forest}
\end{document}