The `remove` function of the AVL tree appears to delete the entire tree by setting the root property of the tree to `undefined` if the root value is removed. This is because the function's call `this.root = balanceUpstream( node.parent );` has parameter `node.parent = null` if `node` is the root (see commented out function call below). Function `balanceUpstream` will then immediately return `undefined` which `remove` assigns to `this.root` deleting the tree. I have fixed this in my implementation of avl-tree.js using a ternary operator: ``` remove( value ) { const node = super.find( value ); if ( node ) { const found = super.remove( value ); const parent = node.parent ? node.parent : this.root; this.root = balanceUpstream( parent ); //this.root = balanceUpstream( node.parent ); return found; } return false; } ``` Posted as a (potential) issue as I am not sure whether this is an issue only in my implementation which differs somewhat from the one in this repository. Cheers!