Branch, 35 bytes
/;{^\;{Z[{Z0]z^[/@^\@^0]~`L`Ln[0`P] Try it on the online Branch interpreter!
Of course, it's only natural that a language based on binary trees would have a way to solve this challenge. Branch is still in development; I'm not sure how I could've solved this before adding a bunch of bugfixes and a couple of new helpers.
Pretty-printing the tree was actually around from the start though. I used it as a debug feature; never thought I would've found a challenge so soon to use a debug feature as output formatting for :P