[pst-tree] Balanced trees

Denis Girou Denis.Girou at idris.fr
Sun May 30 23:42:58 CEST 1999


-----------------------------------------------------------------------------
This is the PSTricks mailing list, devoted to discussions about computational
graphics in (La)TeX using the PSTricks package from Timothy van Zandt.
For help using this mailing list, see instructions at the end of message.
-----------------------------------------------------------------------------

  At that time, Peter Bartke also asked me how to obtain "balanced" trees.
A partial solution can be built looking at the way the "loose" and "tight" fit 
organisations are managed.

  I didn't sent here the solution I gave him at that time, but it can interest 
somebody else:

\documentclass[a4paper]{article}

\usepackage{pst-tree}
\usepackage{lscape}

\makeatletter

\def\pstree at balancedfit#1#2{%
\edef\next{\noexpand\pstree@@balancedfit#1\noexpand\@nil#2\noexpand\@nil}%
\next
\ifnum\pst at cntg=\z@
\pstree at max{#1}\pst at cnth
\else
\pstree at max{#2}\pst at cnth
\fi
\advance\pst at cnth\pst at cnth
\advance\pst at cnth\psk at thistreesep\relax
\advance\pst at cnth\pstree at tspace\relax
\gdef\pstree at tspace{\z@}}
\def\pstree@@balancedfit#1,#2\@nil#3,#4\@nil{%
\ifnum#1=\pstree at stop
\let\next\relax
\pst at cntg=\@ne
\else
\ifnum#3=\pstree at stop
\let\next\relax
\pst at cntg=\z@
\else
\def\next{\pstree@@balancedfit#2\@nil#4\@nil}%
\fi
\fi
\next}

\makeatother

\newcommand{\MyNode}[1]{\Tcircle{\makebox[1em]{#1}}}

\setlength{\textwidth}{19cm}
\setlength{\textheight}{23cm}
\setlength{\oddsidemargin}{0cm}
\setlength{\evensidemargin}{0cm}

\pagestyle{empty}

\begin{document}

\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\MyNode{1}
        \pstree{\MyNode{2}}
               {\MyNode{3}
                \MyNode{4}}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \pstree{\MyNode{4}}
               {\MyNode{5}
                \MyNode{6}}}

\vspace{1cm}

\psset{treefit=loose}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\MyNode{1}
        \pstree{\MyNode{2}}
               {\MyNode{3}
                \MyNode{4}}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \pstree{\MyNode{4}}
               {\MyNode{5}
                \MyNode{6}}}

\vspace{1cm}

\psset{treefit=balanced}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\MyNode{1}
        \pstree{\MyNode{2}}
               {\MyNode{3}
                \MyNode{4}}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \pstree{\MyNode{4}}
               {\MyNode{5}
                \MyNode{6}}}

\vspace{1cm}
\pstree[treemode=R,treefit=tight]{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree[treemode=R]{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree[treemode=R]{\MyNode{0}}
       {\MyNode{4}
        \pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}}

\vspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}
        \pstree{\MyNode{5}}
               {\MyNode{6}
                \MyNode{7}}
        \MyNode{8}}

\vspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}
                \MyNode{4}}
        \MyNode{5}
        \pstree{\MyNode{6}}
               {\MyNode{7}
                \MyNode{8}
                \MyNode{9}}
        \MyNode{10}}

\vspace{1cm}
\pstree{\MyNode{0}}
       {\pstree{\MyNode{1}}
               {\MyNode{2}
                \MyNode{3}}
        \MyNode{4}}
\hspace{1cm}
\pstree{\MyNode{0}}
       {\MyNode{1}
        \pstree{\MyNode{2}}
               {\MyNode{3}
                \MyNode{4}}}

\begin{landscape}

% Generated by a pre-processor (which explain the format)
\pstree{\MyNode{0}}{%
\pstree{\MyNode{1}}{%
\pstree{\MyNode{2}}{%
\pstree{\MyNode{4}}{%
\pstree{\MyNode{8}}{%
}\pstree{\MyNode{9}}{%
}}\pstree{\MyNode{5}}{%
\pstree{\MyNode{10}}{%
}\pstree{\MyNode{11}}{%
}}}\pstree{\MyNode{3}}{%
\pstree{\MyNode{6}}{%
\pstree{\MyNode{12}}{%
}\pstree{\MyNode{13}}{%
}}\pstree{\MyNode{7}}{%
\pstree{\MyNode{14}}{%
}\pstree{\MyNode{15}}{%
}}}}\pstree{\MyNode{16}}{%
\pstree{\MyNode{17}}{%
\pstree{\MyNode{19}}{%
}\pstree{\MyNode{20}}{%
}}\pstree{\MyNode{18}}{%
\pstree{\MyNode{21}}{%
}\pstree{\MyNode{22}}{%
}}}}

\end{landscape}

\end{document}

D.G.

-----------------------------------------------------------------------------
The list interface (subscription, information, access to the archives) is on:
http://www.tug.org/cgi-bin/lwgate/pstricks
Otherway to unsubscribe, send mail to pstricks-request at mail.tug.org
with a blank subject and in body the line unsubscribe <email-address>
-----------------------------------------------------------------------------



More information about the PSTricks mailing list