How to draw an FP-Tree with Latex and TIKZ?

In this blog post, I will show how to draw a beautiful FP-Tree data structure in a Latex document. The FP-Tree is a tree-like structure that was proposed in the FP-Growth algorithm for itemset mining, and is also used in many other pattern mining algorithms. I will show how to draw an FP-tree in Latex using the TIKZ library. An FP-tree consists of a table and a tree that are linked using some pointers (dashed arrows). The result is like this:

I took me a while to obtain this result, so here is the code:

\documentclass[a4paper, 12pt]{article} 



%%%%% THE TREE
\begin{scope}[->,font=\small,draw,circle, every node/.style={fill=white!10,shape=circle,draw},
  edge from parent/.style={black,thick,draw},
  level 1/.style={sibling distance=2.5cm},
  level 2/.style={sibling distance=2.5cm}]
  \node (TREE) {root}
    child {node {$a$:3}
      child {node {$b$:1} }  
      child {node {$c$:2}
        child {node{$d$:1}}}} 
    child {node {$c$:2}
      child {node {$d$:2}}
   % Node links within the tree
  \draw[->, dashed] (TREE-1-2) -- (TREE-2);
  \draw[->, dashed] (TREE-1-2-1) -- (TREE-2-1);
  \begin{scope}[xshift=-5cm,yshift=-2cm,every tree node/.style={shape=rectangle,draw}]
\matrix (TABLE) [matrix of nodes, 
     row sep=-\pgflinewidth, column sep=-\pgflinewidth, 
    nodes={draw, text height=5mm,
    align=center, minimum width=15mm, inner sep=0mm, minimum height=7mm}]{
Item & Link\\ 
$a$ & ~\\
$b$ & ~ \\
$c$ & ~\\
$d$ & ~\\
\draw[->,dashed] ( to  (TREE-1-2.west);
\draw[->,dashed] ( to  (TREE-1-2-1.west);
    \caption{An Example of FP-tree}

Hope that this will be useful! If you like it or if you want to suggest some improvement, please let me know in the comment section below or by e-mail.

Philippe Fournier-Viger is a distinguished professor working in China and founder of the SPMF open source data mining software.

This entry was posted in Latex, Pattern Mining and tagged , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published.