绘制一棵叶子底部对齐的树

绘制一棵叶子底部对齐的树

我想将树的所有叶子都对齐到底部,所以我想要实现的效果应该是这样的:

    p
   / \
  /  /\
 c  d  e

到目前为止我尝试过的(使用 tikz-qtree)结果是:

    p
   / \
  c  /\
    d  e

我目前正在使用 tikz-qtree,但如果有更适合该任务的替代方案,请随时提出建议;)旁注:我实际上不是标记节点,而是标记边。

代码:

\documentclass[12pt]{article}
\usepackage[active,pdftex,tightpage]{preview}
\usepackage{tikz-qtree}
\PreviewEnvironment[]{tikzpicture}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,circle},sibling distance=10pt,
edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
\tikzstyle{every node}=[font=\tiny, sloped,anchor=south,auto=false,inner sep=1pt]
\Tree
[.{}
    \edge node[]{C};
    [.{}
    ]
    \edge node[]{A};
    [.{}
        \edge node[]{D};
        [.{}
        ]
        \edge node[]{E};
        [.{}
        ]
    ]
]
\end{tikzpicture}
\end{document}

答案1

这是一个森林解决方案允许非常简洁地指定树。一旦配置了树的序言(例如,也可以将其保存为样式),我们就可以编写

  [
    [c]
    [a
      [d]
      [e]
    ]
  ]

生产

自动贴标

树中最终节点的对齐是通过

    if n children=0{tier=terminal}{},

完整代码:

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    draw,
    circle,
    delay={
      if level=0{}{
          edge label/.wrap pgfmath arg={node [font=\tiny, sloped, midway, anchor=south, auto=false, inner sep=1pt] {#1} }{content()}
      },
    },
    if n children=0{tier=terminal}{},
    s sep=10pt,
  },
  before typesetting nodes={
    for tree={
      content=,
    }
  }
  [
    [c]
    [a
      [d]
      [e]
    ]
  ]
\end{forest}
\end{document}

答案2

此代码生成您所需要的内容:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}
    \begin{figure}
        \begin{center}
        \tikzstyle{level 1}=[level distance=1.5cm, sibling distance=2.5cm]
        \tikzstyle{level 2}=[level distance=1.5cm, sibling distance=2.5cm]
        \tikzstyle{level 3}=[level distance=1.5cm, sibling distance=1cm]
        \tikzstyle{level 4}=[level distance=1.5cm, sibling distance=2cm]
            \begin{tikzpicture}
            \node {p}
                child{
                    child{
                        node(a){c}
                    } child{edge from parent[draw=none] }
                }
                child{
                    node{}
                    child{
                        node(b){d}
                    }
                    child{
                        node(c){e}
                    }
                };
            \end{tikzpicture}
        \end{center}
    \end{figure}
\end{document}

在此处输入图片描述

致谢这一页。

相关内容