Well, yes. The other compromise is the one Java gives you: write a state of the art garbage collector and include it in your program.
This complaint is very annoying because it assumes a garbage collector is "free" and Rust decided to just not give you one. If you want memory safe trees your options are
* A slow, simple, reference counted garbage collector
* A fast, complex, garbage collector
both are compromises! You are just ignoring the second one.