This is almost certainly done with LaTeX, or one of its friends, and the tikz-qtree package. It is an improvement of the qtree package with nicer node placement. If you are not familiar with LaTeX, and want to learn more, this Wikibook might help (link is to the page about linguistics, but the book is in general about LaTeX). Both tikz-qtree and qtree have a quite extensive manual.
Below is LaTeX code using the tikz-qtree package to draw your tree. The only difference with the original seems to be that the bar over the T and the v is less bold. Perhaps this was done with something like this, but I cannot get it to look exactly the same.
\documentclass[margin=5mm]{standalone}
\usepackage{tikz-qtree}
\begin{document}
\Tree [.TP
[.NP Jane$_i$ ]
[.\=T
[.T did T(past) ]
[.NegP
[.Neg not ]
[.vP
[.NP t$_i$ ]
[.\=v v [.VP \edge[roof]; {go to school} ] ]
]
]
]
]
\end{document}

An older version of this answer just used the qtree package (instead of tikz-qtree) and draws something that looks like your tree. The only trick we need is to use array
and \setlength{\extrarowheight}{2pt}
, because otherwise the bar over the T is touched by the edge. The differences with the original:
- The overbar is less bold;
- in the original, nodes on one level are on the same height (e.g. Janei and T and NegP);
- qtree does not consider text height to draw edges, so there is a lot of space from the edge to the text of the v node at the very bottom (because it has no capital); in the original this looks better.
\documentclass[margin=5mm]{standalone}
\usepackage{qtree}
\usepackage{array}
\setlength{\extrarowheight}{2pt}
\begin{document}
\Tree [.TP
[.NP Jane_i ]
[.\=T
[.T did T(past) ]
[.NegP
[.Neg not ]
[.vP
[.NP t_i ]
[.\=v v \qroof{go to school}.VP ]
]
]
]
]
\end{document}
