Node known by the tree are destroyed by the tree => check the source code.
So
tree.Root := node;
node.Free;
tree.Free;
Frees the node twice.
FreeAndNil does not help, because the reference is in 2 difference variables: node and tree.FRoot
If you destroy node yourself, you must remove it from the tree.
Note that "nodes" are destroyed recursively. The tree destroys "root", and "root" then destroys all its children, and they do destroy there children .....
That means, you can add any one "node" only once into one tree.
If you try to add the same node, as a child to multiple parents... boom.