# How do I make the nodes look in the tree look more evenly spread out and balance the edge length?

How do I make the edges in the tree have same length and have some good symmetry? It looks kinda ugly.

It needs to look more symmetric. Is there a simple way to achieve this goal?

\begin{figure}[h]
\begin{tikzpicture}[
> = stealth,
shorten > = 1pt,
auto,
node distance = 2cm,
semithick % line style
]

\tikzstyle{state}=[
draw = black,
thick,
fill = white,
minimum size = 4mm
]

\node[state][circle, draw](hub) {$hub$};
\node[state][circle, draw] (a) [below left of=hub] {$a$};
\node[state][circle, draw] (b) [below right of=hub] {$b$};

\node[state][circle, draw] (c) [below left of=a] {$c$};
\node[state][circle, draw] (d) [right of=c] {$d$};

\node[state][circle, draw] (e) [below left of=c] {$e$};
\node[state][circle, draw] (f) [right of=e] {$f$};

\node[state][circle, draw] (g) [right of=d] {$g$};
\node[state][circle, draw] (h) [right of=g] {$h$};

\path[->] (a) edge node {100} (hub);
\path[->] (b) edge node {85} (hub);

\path[->] (c) edge node {35} (a);
\path[->] (d) edge node {55} (a);
\path[->] (e) edge node {10} (c);
\path[->] (f) edge node {15} (c);
\path[->] (g) edge node {40} (b);
\path[->] (h) edge node {25} (b);

\node[state][circle, draw] (u) [above left of=hub] {$u$};
\node[state][circle, draw] (v) [above right of=hub] {$v$};

\node[state][circle, draw] (w) [above left of=u] {$w$};
\node[state][circle, draw] (x) [right of=w] {$x$};
\node[state][circle, draw] (y) [right of=x] {$y$};
\node[state][circle, draw] (z) [right of=y] {$z$};

\path[->] (hub) edge node {125} (u);
\path[->] (hub) edge node {25} (v);
\path[->] (u) edge node {50} (w);
\path[->] (u) edge node {60} (x);
\path[->] (v) edge node {10} (y);
\path[->] (v) edge node {12} (z);

\draw (0,-6) node[above,xshift=0.7cm]{$\textsc{Pos and Neg heap represented together as a single structure}$};
\end{tikzpicture}
\end{figure}

May I advertize the forest package for this? Your symmetry concern is taken care of by a single key: calign=fixed edge angles. And it is much easier to punch in the tree, and to customize it.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={calign=fixed edge angles,
edge+={stealth-},grow=south,circle,draw,thick}
[$hub$
[$a$,edge label={node[midway,left]{100}}
[$c$,edge label={node[midway,left]{35}}
[$e$,edge label={node[midway,left]{10}}]
[$f$,edge label={node[midway,right]{15}}]
]
[$d$,edge label={node[midway,right]{55}}]
]
[$b$,edge label={node[midway,right]{85}}
[$g$,edge label={node[midway,left]{40}}]
[$h$,edge label={node[midway,right]{25}}]
]
]
\end{forest}
\end{document}

– Vk1
Dec 4, 2018 at 17:44

by help of tikz libraries arrows.meta, positioning and quotes:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
positioning,
quotes}

\begin{document}
\begin{tikzpicture}[
node distance = 6mm and 4mm,
every edge/.append style = {draw, semithick, shorten >=1pt, -Stealth},
every edge quotes/.append style = {font=\footnotesize, auto, inner sep=1pt},
state/.append style = {circle, draw, minimum size = 5mm,
inner sep=1pt, outer sep=0pt}
]
%%%% below
\node[state] (hub) {\textit{hub}};
\node[state] (a) [below left =12mm and 8mm of hub]  {$a$};
\node[state] (c) [below left = of a]    {$c$};
\node[state] (e) [below left = of c]    {$e$};
\node[state] (d) [below right = of a] {$d$};
\node[state] (f) [below right = of c] {$f$};
%
\node[state] (b) [below right =12mm and 8mm of hub]     {$b$};
\node[state] (h) [below right = of b]       {$h$};
\node[state] (g) [below left = of b]    {$g$};
%%%% above
\node[state] (u) [above left =12mm and 8mm of hub]  {$u$};
\node[state] (w) [above left = of u]    {$w$};
\node[state] (x) [above right = of u]   {$x$};
%
\node[state] (v) [above right =12mm and 8mm of hub] {$v$};
\node[state] (z) [above right = of v]   {$z$};
\node[state] (y) [above left = of v]    {$y$};
%%%% edges
\path   (a) edge  ["100"] (hub)
(b) edge  ["85"] (hub)

(c) edge  ["35"]    (a)
(d) edge  ["55" ']  (a)
(e) edge  ["10"]    (c)
(f) edge  ["15" ']  (c)
(g) edge  ["40"]    (b)
(h) edge  ["25" ,]  (b)

(hub) edge  ["125"] (u)
(hub) edge  ["25" '](v)
(u) edge  ["50"]    (w)
(u) edge  ["60" ']  (x)
(v) edge  ["10"]    (y)
(v) edge  ["12" ']  (z);
\node[below=of hub |- e]
{\textsc{Pos and Neg heap represented together as a single structure}};
\end{tikzpicture}
\end{document}