TheAlgorithms/C-Sharp · error · InvalidOperationException

AVL tree is empty.

Error message

AVL tree is empty.

What it means

AVLTree.GetMin() throws InvalidOperationException with "AVL tree is empty." when the tree's root is null. Like the AA tree, an empty tree has no minimum, and the library deliberately throws instead of returning a default. Callers are expected to verify the tree is non-empty first.

Solutions

  1. Check the tree's emptiness (root null / Count == 0) before GetMin
  2. Catch InvalidOperationException when emptiness is a legitimate state
  3. Restructure code so min queries only run after at least one Add
  4. Return a nullable or default value via your own wrapper method

Example fix

// before
var min = avlTree.GetMin();
// after
var min = avlTree.Count == 0 ? default : avlTree.GetMin();
Defensive patterns

Strategy: validation

Validate before calling

if (avlTree.Count == 0) throw new InvalidOperationException("AVL tree empty; GetMin unavailable");

Type guard

bool hasMin(AVLTree<TKey,TValue> t) => t.Count > 0;

Try / catch

try { var min = avlTree.GetMin(); } catch (InvalidOperationException ex) when (ex.Message == "AVL tree is empty.") { min = default; }

Prevention

When it happens

Trigger: Calling GetMin() on a new AVLTree, after removing the last key, or on a tree never populated.

Common situations: Peeking the smallest key in a priority-like usage before any insert; clearing the tree then querying; constructing from an empty collection then immediately reading a statistic.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of TheAlgorithms/C-Sharp@96e2905cab (2026-09-13). Data as JSON: /api/errors/95f7df3f33d2235b. Report an issue: GitHub.

Appendix: source

Thrown at DataStructures/AVLTree/AVLTree.cs:133

            }
            else
            {
                return true;
            }
        }

        return false;
    }

    /// <summary>
    ///     Get the minimum value in the tree.
    /// </summary>
    /// <returns>Minimum value in tree.</returns>
    public TKey GetMin()
    {
        if (root is null)
        {
            throw new InvalidOperationException("AVL tree is empty.");
        }

        return GetMin(root).Key;
    }

    /// <summary>
    ///     Get the maximum value in the tree.
    /// </summary>
    /// <returns>Maximum value in tree.</returns>
    public TKey GetMax()
    {
        if (root is null)
        {
            throw new InvalidOperationException("AVL tree is empty.");
        }

        return GetMax(root).Key;
    }

View on GitHub (pinned to 96e2905cab)