From the documentation of qtree:
Qtree attempts to align the topmost label of the tree with the baseline of the text, similarly to the effect of the [t] option for \parbox alignment. To center trees vertically on the baseline, enclose the entire tree in a tabular environment.
You have two strategies:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{qtree}
\declaretheorem[name=Example,qed=\ensuremath{\triangleleft}]{example}
\begin{document}
\begin{example}
Bla:
\raisebox{\depth}{%
\Tree [.cons [.s [.s [.s 0 ] ] ] [.cons [.s 0 ] nil ] ]%
}
\end{example}
\end{document}
The second strategy consists in using tikz-qtree that shares the same syntax with qtree, but is much more powerful:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{tikz-qtree}
\declaretheorem[name=Example,qed=\ensuremath{\triangleleft}]{example}
\begin{document}
\begin{example}
Bla:
\begin{tikzpicture}
\Tree [.cons [.s [.s [.s 0 ] ] ] [.cons [.s 0 ] nil ] ]
\end{tikzpicture}
\end{example}
\end{document}
The placement is not really perfect in both cases, so some small adjustment may be necessary.
For centering, use an equation* environment and the \qedhere feature:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{tikz-qtree}
\declaretheorem[name=Example,qed=\ensuremath{\triangleleft}]{example}
\begin{document}
\begin{example}
Bla:
\begin{equation*}
\begin{tikzpicture}
\Tree [.cons [.s [.s [.s 0 ] ] ] [.cons [.s 0 ] nil ] ]
\end{tikzpicture}}\qedhere
\end{equation*}
\end{example}
\end{document}
