
답변1
다음을 사용하는 솔루션은 다음과 같습니다 forest
.
기본 아이디어는 다이어그램이 북쪽으로 자라는 나무( grow'=north
)이고 화살표가 뒤쪽을 가리키는 것( latex-
)이라는 것입니다. 각 노드(상단의 나뭇잎 제외)는 \tikzset
with 를 사용하여 정의된 다중 부분 노드입니다 rectangle split
.
\documentclass{article}
\usepackage{forest}
\usetikzlibrary {shapes.multipart}
\tikzset{multinode/.style={rectangle split, rectangle split horizontal, rectangle split parts=#1, anchor=center}}
\colorlet{c1}{yellow!30}
\colorlet{c2}{green!30}
\colorlet{c3}{red!30}
\colorlet{c4}{cyan!30}
\begin{document}
\begin{forest}
for tree={grow'=north, l sep=7mm, edge={gray!70,very thick, latex-, shorten <=2pt, shorten >=2pt}, draw, anchor=center}
[\nodepart{one}1\nodepart{two}1\nodepart{three}2\nodepart{four}2\nodepart{five}5\nodepart{six}7\nodepart{seven}7\nodepart{eight}8, multinode=8, {rectangle split part fill={c2,c4,c1,c3,c3,c1,c4,c2}}, for children={multinode=4}
[\nodepart{one}1\nodepart{two}2\nodepart{three}7\nodepart{four}8, {rectangle split part fill={c2,c1,c1,c2}}, for children={multinode=2}
[\nodepart{one}2\nodepart{two}7, fill=c1, for descendants={fill=c1}[7][2]]
[\nodepart{one}1\nodepart{two}8, fill=c2, for descendants={fill=c2}[8][1]]
]
[\nodepart{one}1\nodepart{two}2\nodepart{three}5\nodepart{four}7, {rectangle split part fill={c4,c3,c3,c4}}, for children={multinode=2}
[\nodepart{one}2\nodepart{two}5, fill=c3, for descendants={fill=c3}[2][5]]
[\nodepart{one}1\nodepart{two}7, fill=c4, for descendants={fill=c4}[7][1]]
]
]
\end{forest}
\end{document}