I am not sure whether this is what you want, but you can shift the nodes of a certain level to the left and right (since the default sibling distance is 15mm, in order to vertically align the nodes, you would need to shift all nodes by the half of this value which is 7.5mm):
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[level 2/.style={every node/.style={xshift=-7.5mm}}]
\node {0}
child {node {a}}
child {node {b}}
child {node {c}
child {node {a1}}
child {node {b1}}
child {node {c1}}
child {node {d1}}
}
child {node {d}}
;
\end{tikzpicture}
\end{document}
Variations of the above if one node is missing:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[level 2/.style={sibling distance=22.5mm, every node/.style={xshift=-7.5mm}}]
\node {0}
child {node {a}}
child {node {b}}
child {node {c}
child {node {a1}}
child {node {b1}}
child {node {d1}}
}
child {node {d}}
;
\end{tikzpicture}
\end{document}
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[level 2/.style={every node/.style={xshift=-7.5mm}}]
\node {0}
child {node {a}}
child {node {b}}
child {node {c}
child {node {a1}}
child {node {b1}}
child[missing] {}
child {node {d1}}
}
child {node {d}}
;
\end{tikzpicture}
\end{document}
Maybe, you could also try the forest
package:
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest} for tree={node options={text width=1.25em, align=center}}
[0
[a]
[b]
[c
[a1]
[b1]
[c1, calign with current]
[d1]
]
[d]
]
\end{forest}
\end{document}
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest} for tree={node options={text width=1.25em, align=center}}
[0
[a]
[b]
[c
[a1]
[b1]
[, phantom, calign with current]
[d1]
]
[d]
]
\end{forest}
\end{document}
\node {0} [grow=right] ...
? Or maybe you want[level 2/.style={every node/.style={xshift=-7.5mm}}]
(as option to thetikzpicture
)?