将图分解绘制为树

将图分解绘制为树

假设我有一个这样的三角形,它可以很容易地由 pgf 生成。

在此处输入图片描述

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}[
    vertex/.style={circle, draw=blue!60, fill=blue!40, minimum size=2mm},
    line/.style = {draw, thick}
    ]
    \newcommand\mylength{30mm}
    \coordinate (A) at ( 90: \mylength);
    \coordinate (B) at (210: \mylength);
    \coordinate (C) at (-30: \mylength);

    \path [line] (A) -- (B);
    \path [line] (B) -- (C);
    \path [line] (C) -- (A);

    \node [vertex] at (A) {1};
    \node [vertex] at (B) {2};
    \node [vertex] at (C) {3};

  \end{tikzpicture}
\end{document}

这是我想要绘制的图表:

          1
         / \
        /   \
       2-----3

      /       \
     /         \

    1             1
     \             \
      \             \
 2-----3             3

有些人可能会注意到,这幅画是关于一个删除-收缩复发. 顶部节点的一个三角形分解为两个子图:

  • 左孩子由删除边缘 1-2
  • 正确的孩子是通过承包一条边 1-2,通过将两个端点 1 和 2 合并为“新 1”节点,然后删除多条边,该边缩小为一个点。

我想让这个过程一直持续下去,直到树达到更小的图,这样最终的输出就会大得多。即使对于深度为 1 的小树,我也不知道绘制这种树的最佳方法是什么。有什么提示或建议吗?


添加: 我在这个例子中使用了三角形,因为它是可以用作示例的最简单的图形。感兴趣的图形可以是任何随意的图形,我更喜欢将每个图形包裹在某种“节点”或“盒子”中,然后将每个容器节点连接起来作为树中的节点。最好的方法是什么?

抱歉造成任何混淆。

答案1

也许您可以将每个图定义为TikZ pic。每个图都pic可以是您想要的任何东西。如果您在其中使用节点,由于 pic 的名称空间对于每个 pic 都是独立的并且所有名称都会被记住,因此很容易将它们连接起来。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,trees}

\tikzset{
    vertex/.style  = {circle, draw=blue!60, fill=blue!40, minimum size=2mm},
    all/.pic={
        \node[vertex] (-1) {1};
        \node[vertex, below left=1cm and 5mm of -1] (-2) {2};
        \node[vertex, below right=1cm and 5mm of -1] (-3) {3};
        \draw(-1)--(-2)--(-3)--cycle;
    },
    left/.pic={
        \node[vertex] (-1) {1};
        \node[vertex, below left=1cm and 5mm of -1] (-2) {2};
        \node[vertex, below right=1cm and 5mm of -1] (-3) {3};
        \draw(-1)--(-3)--(-2);
    },
    right/.pic={
        \node[vertex] (-1) {1};
        \node[vertex, below right=1cm and 5mm of -1] (-3) {3};
        \draw(-1)--(-3);
    },
}

\begin{document}
\begin{tikzpicture}

\pic (A) at (0,0) {all};
\pic (B) at (-2,-3) {left};
\pic (C) at (2,-3) {right};

\draw (A-2)--(B-1);
\draw (A-3)--(C-1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

使用 Tikz 的解决方案。

输出

图1

代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,trees}

\tikzset{
    vertex/.style  = {circle, draw=blue!60, fill=blue!40, minimum size=2mm}
}

\begin{document}
\begin{tikzpicture}[%
   no edge from this parent/.style={
       edge from parent/.style={draw=none}},
   level 1/.style={sibling distance=2cm},
   level 2/.style={sibling distance=2cm},
   level distance=2cm]

\node[vertex] (n1) {1}
    child {node[vertex] (n2) {2}
        child{node[vertex] (n4) {1}
            child[no edge from this parent]{node[vertex] (n5) {2}}
            child{node[vertex] (n6) {3}}
        }
        child[no edge from this parent]{node {}}
    }
    child {node[vertex] (n3) {3}
        child[no edge from this parent]{node {}}
        child{node[vertex] {1}
            child[no edge from this parent]{node {}}
            child{node[vertex] (n9) {3}}
        }
    };
\draw (n2) -- (n3); 
\draw (n5) -- (n6); 
\end{tikzpicture}
\end{document}

相关内容