> You learn binary trees by building one yourself. That's the best way.
Sure - do it once, but if you're trying to wrap your head around a new algorithm or just trying to focus on one particular problem, it's very de-motivating to not have quality debug-printers, random-data-generators, etc.
Story: I was once trying to wrap my head around heap.remove() (and the associated sift-up) and I had my own tree class and various ways to print and inspect it. I couldn't for the life of me figure out why my sift wasn't working. Wasted like an hour on it. Turns out it was working, it was just my printing/test-harness stuff that was flawed. Sure that was a useful hard-knock, but it really served as a distraction from what I was trying to do at the moment. Made me stop doing tree katas for a few weeks out of frustration.
> Something as fundamental like binary trees and algorithms should be taught/learned properly.
"Properly" is pejorative here. I would say this class/lib is an extremely useful part of learning more advanced tree/algo concepts properly.
Having a helper class that solves some of the basics well and sets you up for success lets you focus on the larger problems without having to constantly re-visit the basics. It's how abstractions are made and learned.