#1 India's Top IT Training Institute

×

About Uncodemy

Know more about who we are and what we stand for.

About Us

About Us

Discover our mission to equip individuals with essential IT skills and industry expertise.

Read More →
UnCodeMy Gallery

UnCodeMy Gallery

Explore highlights from our IT training sessions and success stories.

Read More →
×

Free Resources

Learn, practice and plan your career — bilkul free.

Tutorials

Tutorials

Step-by-step written tutorials to learn any technology at your own pace.

Read More →
Free Counselling

Free Counselling

Book a free video counselling session and pick the right course for you.

Read More →
Online Compiler

Online Compiler

Write, run and test your code online — no setup required.

Read More →
Trees

AVL Tree in Data Structure with Example

An AVL Tree (named after inventors Adelson-Velsky and Landis) is a self-balancing Binary Search Tree in which the height difference between the left and right subtrees of every node — called the balance factor — is at most 1.

Balance Factor

Balance Factor = height(left subtree) − height(right subtree). It must be -1, 0, or 1 for every node. If an insertion or deletion violates this, the tree performs rotations to restore balance.

Rotations

  • Left Rotation: used when a node is right-heavy.
  • Right Rotation: used when a node is left-heavy.
  • Left-Right Rotation: a left rotation followed by a right rotation.
  • Right-Left Rotation: a right rotation followed by a left rotation.

Worked Example

Inserting 10, 20, 30 in that order into an empty AVL tree causes a right-heavy imbalance at node 10 after inserting 30 (a 'Left-Left' case from the perspective of node 10 being unbalanced due to its right-right chain). The tree performs a single left rotation, making 20 the new root with 10 as its left child and 30 as its right child, restoring balance.

class Node:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None
        self.height = 1

def height(node):
    return node.height if node else 0

def right_rotate(y):
    x = y.left
    T2 = x.right
    x.right = y
    y.left = T2
    y.height = 1 + max(height(y.left), height(y.right))
    x.height = 1 + max(height(x.left), height(x.right))
    return x

def left_rotate(x):
    y = x.right
    T2 = y.left
    y.left = x
    x.right = T2
    x.height = 1 + max(height(x.left), height(x.right))
    y.height = 1 + max(height(y.left), height(y.right))
    return y

Complexity

OperationTime
Search/Insert/DeleteO(log n)

Applications

  • Databases and file systems requiring guaranteed logarithmic lookup time.
  • In-memory indexing structures.
  • Situations with frequent insertions/deletions where balance must be maintained.

Ready to master Data Structures & Algorithms?

Learn DSA hands-on with mentor-led sessions, real interview practice, and placement support.

Explore Course