无法在二叉树布局中命名子节点

无法在二叉树布局中命名子节点

我正在尝试绘制一个自定义二叉树。我通读了手册。据我所知,可以命名子节点。但是,以下代码是意料之外的。在同一个节点上绘制了两个圆圈。如何修复我的代码?非常感谢!

% !TEX program = lualatex

\documentclass[12pt,A4]{standalone}
\usepackage{tikz}
\usetikzlibrary {graphs,graphdrawing} 
\usegdlibrary {trees, layered}

\begin{document}
    
\begin{tikzpicture} [binary tree layout, ] 
    \node[name=nodeA]{A}
    child { 
        node[ fill=green, name=nodeB]{B}
        child [missing]
        child { node {C}
            child { node {D} } 
            child [missing]
        }
    };
    \draw [red] (nodeA) circle [radius=3mm];
    \draw [green] (nodeB) circle [radius=8mm]; 
\end{tikzpictur}
    
\end{document}

在此处输入图片描述

答案1

欢迎来到 TeX.SE!

您的问题可以通过使用纯简单解决tikz


\documentclass[12pt, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary {graphs,graphdrawing}
\usegdlibrary {trees, layered}

\begin{document}
    \begin{tikzpicture}
\node (A) {A}
    child {node (B) [fill=green] {B}
        child [missing]
        child { node {C}
            child { node {D} }
            child [missing]
                }
            }
    child [missing]
;
\draw [red] (A) circle [radius=3mm];
\draw [green] (B) circle [radius=8mm];
    \end{tikzpicture}
\end{document}

在此处输入图片描述

附录:不清楚你的问题是什么。从你的回答(实际上是一个新问题)可以看出,你有时在某个树层中有许多节点。在这种情况下,它们不会重叠,你需要定义sibling distance适当的大小。例如:

\documentclass[12pt, margin=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary {graphs,graphdrawing}
\usegdlibrary {trees, layered}

\begin{document}
    \begin{tikzpicture}[
sibling distance = 22mm
                        ]
\node (A) {A}
    child {node (B) [fill=green] {B}
        child [missing]
        child { node {C}
            child { node {D} }
            child [missing]
                }
            }
    child {node {something}}
;
\draw [red] (A) circle [radius=3mm];
\draw [green] (B) circle [radius=8mm];
    \end{tikzpicture}
\end{document}

在此处输入图片描述

但在这种情况下,如果想在这个新节点上画圆圈,那么圆圈将与邻域中的节点重叠。这意味着你用圆圈强调某些节点的方式并不理想。

由于您问题的背景不明,因此很难帮助您。对于绘制树,使用包似乎是您的forest最佳选择。

相关内容