如何製作向右分支的不平衡二元樹?

如何製作向右分支的不平衡二元樹?

我想要的圖像:

伊姆古爾

對於有興趣的人:這個特定的數字取自本文(我找不到免費版本)並顯示k-桶(正方形)覆蓋了二進位 ID 空間中越來越大的前綴。

如果有人能就如何製作這種類型的樹提出建議,我將不勝感激:

  • 每片葉子都是一個桶子/方塊
  • 只有葉子有水桶。
  • 樹向右分叉,每個分支留下的空間是前一個分支的一半

編輯

我對 Gonzalo Medina 出色的答案中的一些數字進行了一些調整,以更接近我想要的,但我必須承認,我不知道發生了什麼以及程式碼如何運作。

我現在想要的是讓樹更寬,這樣盒子就不會在垂直軸上重疊。

\begin{forest}
for tree={parent anchor=south, child anchor=north},
s sep=30pt,
[
  [,draw,text width=4cm,edge label={node[midway,left=12pt]{$1$}}]
  [,shape=coordinate,edge label={node[midway,right=10pt]{$0$}}
    [,draw,text width=2cm,edge label={node[midway,left=4pt]{$1$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=4pt]{$0$}}
      [,draw,text width=0.5cm,edge label={node[midway,left]{$1$}}]
      [,draw,text width=0.5cm,edge label={node[midway,right]{$0$}}]
    ]
  ]
]
\end{forest}

伊姆古爾

另外,如果我想在某些框中添加文本,我應該把它放在哪裡?

答案1

與強大的forest包裹:

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
s sep=30pt,
[
  [,draw,text width=3cm,edge label={node[midway,left=4pt]{$0$}}]
  [,shape=coordinate,edge label={node[midway,right]{$1$}}
    [,draw,text width=2cm,edge label={node[midway,left]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right]{$1$}}
      [,draw,text width=1cm,edge label={node[midway,left]{$0$}}]
      [,draw,text width=1cm,edge label={node[midway,right]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

在此輸入影像描述

l使用、l sep(垂直距離)、s sep(水平距離)的值,您可以變更樹的幾何形狀(請參閱套件文件以取得有關這些鍵的說明)。一個小例子::

\documentclass{article}
\usepackage{forest}

\begin{document}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
for tree={l =-0ex}
[,s sep=3cm
  [,draw,text width=3cm,edge label={node[midway,above left=0pt]{$0$}}]
  [,s sep=1.5cm,shape=coordinate,edge label={node[midway,above right]{$1$}}
    [,draw,text width=2cm,edge label={node[midway,left=8pt]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=8pt]{$1$}}
      [,draw,text width=1cm,edge label={node[midway,left=6pt]{$0$}}]
      [,draw,text width=1cm,edge label={node[midway,right=6pt]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

在此輸入影像描述

如果這些框應該有文本,最好為它們定義一個樣式,以確保所有框都具有相同的高度:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
myempty/.style={
  draw,
  text width=#1,
  minimum height=16pt,
  anchor=north
  }
}

\begin{forest}
for tree={parent anchor=south, child anchor=north},
for tree={l =2ex}
[,s sep=1cm
  [texta,myempty=3cm,edge label={node[midway,above left=0pt]{$0$}}]
  [,s sep=1cm,shape=coordinate,edge label={node[midway,above right]{$1$}}
    [textb,myempty=2cm,edge label={node[midway,left=8pt]{$0$}}]
    [,shape=coordinate,s sep=-\pgflinewidth,edge label={node[midway,right=8pt]{$1$}}
      [textc,myempty=1cm,edge label={node[midway,left=6pt]{$0$}}]
      [textd,myempty=1cm,edge label={node[midway,right=6pt]{$1$}}]
    ]
  ]
]
\end{forest}

\end{document}

在此輸入影像描述

相關內容