在二叉树中绘制虚线边并在不同节点之间添加新边

在二叉树中绘制虚线边并在不同节点之间添加新边

我想在二叉树中与子节点和父节点没有明确关系的节点之间添加额外的边,并改变边的样式。

目前我有以下代码:

\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=。可以通过调整单个节点的真实xy坐标将其从计算位置移开,就像我对节点所做的那样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}

相关内容