如何用LaTeX的tikzpicture绘制无重叠节点的AVL树?
解决TikZ绘制AVL树节点重叠的问题
方案1:调整TikZ Tree库的层级间距
第三行节点重叠的核心原因是下层节点的同级间距(sibling distance)过小,可通过为不同层级单独设置间距参数解决:
在TikZ环境配置中,用level n样式定义对应层级的间距:
\begin{tikzpicture}[ every node/.style={circle, draw, minimum size=8mm}, % 统一节点样式 level 1/.style={sibling distance=4cm, level distance=2.5cm}, % 根节点的子节点层 level 2/.style={sibling distance=2cm, level distance=2.5cm} % 根节点的孙节点层 ] \node {10} child {node {5} child {node {3}} child {node {7}} } child {node {15} child {node {12}} child {node {18}} }; \end{tikzpicture}
level n对应第n层(根节点为level 0),根据你的树结构调整sibling distance数值,数值越大,同级节点间距越宽。level distance控制上下层的垂直距离,避免垂直方向节点拥挤。
方案2:改用Forest包(更省心的树绘制工具)
Forest包专门优化了树结构排版,自动处理节点间距,大幅减少手动调整的工作量:
\documentclass{article} \usepackage{forest} \begin{document} \begin{forest} for tree={circle, draw, minimum size=8mm, l sep=2.5cm, s sep=2cm} [10 [5 [3] [7] ] [15 [12] [18] ] ] \end{forest} \end{document}
l sep设置层级间的垂直距离,s sep设置同级节点的水平间距,全局配置后Forest会自动避免节点重叠。
如果你的AVL树结构更复杂,只需对应调整重叠层级的间距参数即可。
内容的提问来源于stack exchange,提问作者Yannick Fitch
相关产品推荐
相关产品推荐

