error: type 'Tree' is infinitely sized (it contains itself by value); use a pointer ('*Tree') to break the cycle