如何使用 tikz 来设计树的样式?

如何使用 tikz 来设计树的样式?

我想将一棵树设计成这种形式:

目标

但是我的代码生成了这个:

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}
        [level distance=10mm,
                every node/.style={fill=red!60,circle,inner sep=1pt},
                level 1/.style={sibling distance=20mm,nodes={fill=red!45}},
                level 2/.style={sibling distance=10mm,nodes={fill=red!30}},
        level 3/.style={sibling distance=5mm,nodes={fill=red!25}}]
        \node {31}
        child {node {30}
                child {node {20}
                        child {node {5}}
                        child {node {4}}
                }
                child {node {10}
                        child {node {9}}
                        child {node {1}}
                }
        }
        child {node {20}
                child {node {19}
                        child {node {1}}
                        child[missing]
                }
                child {node {18}}
        };
\end{tikzpicture}

\end{document}

我怎样才能使线从圆心而不是边缘开始?

答案1

作为艾伦·芒恩在他的评论中提到,该tikz-qtree包将分支路径的锚点设置为节点的底部,这对于语言树来说是最合适的;下面的示例展示了这一点(第一棵树),还包含一个修改版本(第二棵树),通过添加

edge from parent path={(\tikzparentnode) to (\tikzchildnode)}`

代码:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}[
  level distance=10mm,
  every node/.style={fill=red!60,circle,inner sep=1pt},
  level 1/.style={sibling distance=20mm,nodes={fill=red!45}},
  level 2/.style={sibling distance=10mm,nodes={fill=red!30}},
  level 3/.style={sibling distance=5mm,nodes={fill=red!25}}
]
\node {31}
  child {node {30}
    child {node {20}
      child {node {5}}
      child {node {4}}
    }
    child {node {10}
      child {node {9}}
      child {node {1}}
    }
  }
  child {node {20}
    child {node {19}
      child {node {1}}
      child[missing]
    }
    child {node {18}}
  };
\end{tikzpicture}

\begin{tikzpicture}[level distance=10mm,
  every node/.style={fill=red!60,circle,inner sep=1pt},
  level 1/.style={sibling distance=20mm,nodes={fill=red!45}},
  level 2/.style={sibling distance=10mm,nodes={fill=red!30}},
  level 3/.style={sibling distance=5mm,nodes={fill=red!25}},
  edge from parent path={(\tikzparentnode) to (\tikzchildnode)}
]
\node {31}
  child {node {30}
    child {node {20}
      child {node {5}}
      child {node {4}}
    }
    child {node {10}
      child {node {9}}
      child {node {1}}
    }
  }
  child {node {20}
    child {node {19}
      child {node {1}}
      child[missing]
    }
    child {node {18}}
  };
\end{tikzpicture}

\end{document}

结果:

在此处输入图片描述

相关内容