Since a node has no direct control over the root, how can I change the root pointer when I have to? (A one-child or no-child delete of the root node.) Every node contains a pointer: Tree *t. This pointer points to the Tree object containing that node. If a tree contains 1000 nodes, then every one of those 1000 nodes has a t pointer pointing to the Tree object. From any method in the node class, I can say, for example, t->setroot (nullptr); This will call t (the Tree's setroot) method. Or I can say t->setroot (anything else). Every node in the tree contains four pointers: One to the left child, one to the right child, one back to the parent, and one to the Tree object itself.