TikZ 树中节点的垂直路径

TikZ 树中节点的垂直路径

如何将两个特定节点之间的路径设置为“垂直”而不是“直接”?

目前我的树看起来像这样:

\begin{tikzpicture}[level distance=1.5cm,
    every node/.style={draw=black,very thick,minimum width=10mm,inner sep=2mm},
    every path/.style={thick},
    level 1/.style={sibling distance=4cm},
    level 2/.style={sibling distance=2cm},
    level 3/.style={sibling distance=0.5cm,level distance=10mm},
    leaf/.style={fill=black,minimum width=2mm,minimum height=2mm,inner sep=0mm}]
    \node{10}
        child{node{8}
            child{node{5}
                child{node[leaf]{}}
                child{node[leaf]{}}
            }
            child{node{9}
                child{node[leaf]{}}
                child{node[leaf]{}}
            }
        }
        child{node{20}
            child{node{12}
                child{node[leaf]{}}
                child{node[leaf]{}}
            }
            child{node{21 29}
                child[edge from parent]{node[leaf]{}}
                child{node[leaf]{}}
                child{node[leaf]{}}
            }
        };
\end{tikzpicture}

B-树

我希望最后一行和叶子之间的路径是垂直的,而不是对角的。

答案1

您可以使用 键更改绘制边缘的方式edge from parent path。将level 3/.style线条更改为:

level 3/.style={
    sibling distance=0.5cm,
    level distance=10mm,
    edge from parent path={
        (\tikzchildnode.north) -- (\tikzchildnode.north |- \tikzparentnode.south)
    }
},

如果AB是坐标,则是通过的垂直线和通过的水平线A |- B的交点。因此画一条线到这个交点。AB(A) -- (A |- B)

示例代码输出

如果你要经常这样做,那就形成自己的风格:

\tikzset{edge from parent vertical/.style={
   edge from parent path={
       (\tikzchildnode.north) -- (\tikzchildnode.north |- \tikzparentnode.south)
   }
}}

然后您可以将该行更改为:

level 3/.style={sibling distance=0.5cm,level distance=10mm,edge from parent vertical}

相关内容