# Tikz drawing: child node positioning

I want to achive such drawing with n nodes in level n. (Ignore the irregularities of circle)

From http://www.texample.net/tikz/examples/coin-flipping/, it has 4 nodes in level 3. When I cancel one node in the code (by commenting the node), the child node goes straight below another node.

\documentclass[border=10pt,varwidth]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, shapes, backgrounds}
\usepackage{amsmath, amssymb}
\pagecolor{olive!50!yellow!50!white}
\begin{document}
\tikzset{
label = center:\textsf{\Large H}},
tail/.style = {fill = blue!70!yellow, text = black,
label = center:\textsf{\Large T}}
}
\begin{tikzpicture}[
scale = 1.5, transform shape, thick,
every node/.style = {draw, circle, minimum size = 10mm},
grow = down,  % alignment of characters
level 1/.style = {sibling distance=3cm},
level 2/.style = {sibling distance=4cm},
level 3/.style = {sibling distance=2cm},
level distance = 1.25cm
]
\node[fill = gray!40, shape = rectangle, rounded corners,
minimum width = 6cm, font = \sffamily] {Coin flipping}
child { node[shape = circle split, draw, line width = 1pt,
minimum size = 10mm, inner sep = 0mm, font = \sffamily\large,
rotate=30] (Start)
{ \rotatebox{-30}{H} \nodepart{lower} \rotatebox{-30}{T}}
child {   node [head] (A) {}
child { node [head] (B) {}}
child { node [tail] (C) {}}
}
child {   node [tail] (D) {}
% child { node [head] (E) {}}
child { node [tail] (F) {}}
}
};

% Filling the root (Start)
\begin{scope}[on background layer, rotate=30]
\fill[head] (Start.base) ([xshift = 0mm]Start.east) arc (0:180:5mm)
-- cycle;
\fill[tail] (Start.base) ([xshift = 0pt]Start.west) arc (180:360:5mm)
-- cycle;
\end{scope}

% Labels
\begin{scope}[nodes = {draw = none}]
\path (Start) -- (A) node [near start, left]  {$0.5$};
\path (A)     -- (B) node [near start, left]  {$0.5$};
\path (A)     -- (C) node [near start, right] {$0.5$};
\path (Start) -- (D) node [near start, right] {$0.5$};
%\path (D)     -- (E) node [near start, left]  {$0.5$};
\path (D)     -- (F) node [near start, right] {$0.5$};
\begin{scope}[nodes = {below = 11pt}]
\node [name = X] at (B) {$0.25$};
\node            at (C) {$0.25$};
%\node [name = Y] at (E) {$0.25$};
\node            at (F) {$0.25$};
\end{scope}

\end{scope}
\end{tikzpicture}
\end{document}


How can I make the nodes position like my raw drawing above?

Like this?

Since you didn't provide your effort I help with code on given link. I only comment what I tough that is unnecessary and change child

child {   node [tail] (E) {}


to

child[missing] { node [head] (E) {}}


Complete MWE is:

\begin{tikzpicture}[
thick,
every node/.style = {circle, minimum size = 10mm,
font = \sffamily\large, text = black},
head/.style = {draw, fill = orange!90!blue, label=center:\textsf{\Large H}},
tail/.style = {draw, fill = blue!60!yellow, label=center:\textsf{\Large T}},
prob/.style = {draw=none, minimum size=0pt, pos=0.25},
related/.style = {rectangle, draw=none, minimum size=0pt},
%
level 2/.style = {sibling distance=4cm},
level 3/.style = {sibling distance=2cm},
level distance = 1.5cm
]
\node[fill=gray!20, shape = rectangle, rounded corners, draw,
minimum width = 32mm, minimum height = 8mm] {Coin flipping}
child {node (A) [shape = circle split, draw,
inner sep = 0mm, rotate=45] (Start)
{ \rotatebox{-45}{H} \nodepart{lower} \rotatebox{-45}{T}
}
edge from parent node[prob,left] {0.5}}
child {node (D) [tail,label=below:0.25] {}
edge from parent node[prob,right] {0.5}}
edge from parent node[prob,left] {0.5}
}
child {node (E) [tail] {}
child[missing] { (F) node [head] {}}
child {node (G) [tail] {}
edge from parent node[prob,left] {0.5}}
child {node (I) [tail,label=below:0.25] {}
edge from parent node[prob,right] {0.5}}
edge from parent node[prob,right] {1}% changed probability
}
edge from parent node[prob,right] {0.5}% changed probability
}
};
% Line between nodes C and E
\draw[draw=red,<->,shorten >=1mm,shorten <=1mm]
(D) -- node[related,above] {related \dots} (G);
% Filling the root (Start)
\begin{scope}[on background layer, rotate=45]
\fill[head] (Start.base) (Start.east) arc (  0:180:5mm) -- cycle;
\fill[tail] (Start.base) (Start.west) arc (180:360:5mm) -- cycle;
\end{scope}
\end{tikzpicture}
\end{document}


Edit: ups, now I see, that before I didn't upload last version of my answer as I promised in my comment. Now this is corrected.

• Is there an "automated" way of doing this so that I can draw a graph for like 10 levels? Also, can the rightmost lines connecting the nodes at each level parallel to each other? – Ka-Wa Yip Nov 28 '15 at 11:15
• @kww, I'm afraid that I don't understand what you mean with "automated" way". You can draw tree to desired level on the same way as it is drawn presented tree. Of course, missed children can't have child. In above tree the nodes has names, so you can easy connect them by lines/arrows, for example with \draw (D) -- (F); (after tree drawing). – Zarko Nov 28 '15 at 11:41
• @kww, meanwhile I add to my answer a line, which connect nodes D and F (to see, how I mean in previous comment and partially rewrote code to be more compact (according to my opinion). – Zarko Nov 28 '15 at 12:42

I don't know what degree of regularity you have, but, the following can help in drawing n nodes at level n as you described.

\documentclass[border=4pt,tikz]{standalone}
\usetikzlibrary{calc, positioning}
\begin{document}

\begin{tikzpicture}[ht/.style={circle,draw,minimum size=3em},node distance=4em and 2em,line width=.7pt]
\node[ht] (n0) {};
\foreach \x [evaluate=\x as\i using 5-\x] in {1,...,4}{
\foreach \y [count=\j from 0] in {1,...,\i}{
\node[ht, below right= of n\j] (n\y) {};
\draw (n\j)--node[right]{0.5}(n\y);
}
\node[ht,draw=none](n0old) at (n0){};
\node[ht, below left= of n0] (n0) {};
\draw (n0old)--node[left]{0.5}(n0);
}
\foreach \nf in {0,...,4} \node[below= .5em of n\nf] {0.25};
\end{tikzpicture}

\end{document}