/** * @param BinaryTree $node * * @return BinaryTree|null */ protected function balance(BinaryTree $node = null) { if ($node === null) { return null; } $diff = $node->leftHeight() - $node->rightHeight(); if ($diff < -1) { // right side is taller $node = $this->rotateLeft($node); } elseif ($diff > 1) { // left side is taller $node = $this->rotateRight($node); } return $node; }