trees

Definition

Adelson-Velsky-Landis Tree

An AVL tree is a self-balancing binary search tree with the benefit that lookup, insertion, and deletion all take (logarithmic time complexity) and only take (linear) space complexity.

A binary search tree is called AVL tree if all of its tree nodes are balanced, i.e. for every tree node , it holds:

where is the balance of .

It’s named after Georgy Adelson-Velsky and Evgenii Landis.

Height

The height of an empty tree is defined as :

def height(u: TreeNode) -> int:
	if u == null:
		return -1
	else:
		return u.height

Height Theorem

The height condition of an AVL tree ensures that the height of an AVL tree with nodes is constrained by .

Balance

Let be a tree node of a AVL tree, and be the height of ‘s left subtree and be the height of ‘s right subtree.

The balance is defined as:

Note that the height of an empty tree is defined as .

Balanced Node

A tree node is called balanced iff:

Operations

Insertion

The insertion operation of a tree node into the AVL tree is equal to the insertion in binary search trees, except that the AVL tree rebalances afterwards.

The time complexity of adding a node is logarithmic, i.e. .

Removal

The insertion operation of a tree node into the AVL tree is equal to the removal in binary search trees, except that the AVL tree rebalances afterwards.

The time complexity of removing a node is logarithmic, i.e. .

Rebalance

After an alteration, i.e. insertion or removal, of the AVL tree, rebalancing is mandatory to ensure all remaining nodes are balanced.