tikz-qtree 中的直接和非直接父子连接

tikz-qtree 中的直接和非直接父子连接

我想要实现类似这样的目标(没有边界框):

二叉树图

这里,第一个子项与父项有一条直线,接下来的子项则是对角线。

哪些 tikzset 设置可以允许这样做,或者我将如何实现这一点,以及我可以在哪里了解更多有关它的信息?

目前我有:

\tikzset{every tree node/.style={minimum width=2em,draw,circle},
         blank/.style={draw=none},
         edge from parent/.style=
         {draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}},
         level distance=1.5cm}

这是我在 tex.sx 上的一篇文章中得到的,但对其工作原理了解不多。

答案1

使用森林包中,你可以定义一个样式,我们将在这里调用它,然后将其应用到每棵树:

\documentclass[a4paper]{article}
\usepackage{forest}

\forestset{
    B/.style={for tree={calign=last, circle,draw}}
}

\begin{document}
\begin{forest}
B
[9 
  [6
    [4
      [3]
    ]
    [2]
  ]
  [5
    [1]
  ]
  [7]
]
\end{forest}
\end{document}

结果:

渲染二叉树

答案2

另一种选择是通过tikz树。这里event为每个节点定义了一个圆形的样式。

在此处输入图片描述

代码

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}

\begin{document}

\begin{tikzpicture}
 [event/.style={circle,thick,draw,text width=0.6cm, text centered,font=\sffamily,anchor=north},
 edge from parent/.style={very thick,draw=black!70},
 ]
 \node (g) [event] {} 
       child {node[event,below= 1cm of g] (e3) {}}
       child {node[event,left=1cm of e3] (e2) {} 
                child {node[event, below=1cm of e2] (e21) {}    
                      }
             }           
       child {node[event,left=1cm of e2] (e1){}
                child {node[event,below= 1cm of e1] (e11) {} 
                      }
                child {node[event,left=1cm of e11]  (e12) {}
                          child[event]{node[event]{}}
                      }
             };  
\end{tikzpicture}

\end{document}

相关内容