An AVL tree is a self-balancing binary search tree. It is named after its inventors Adelson-Velsky and Landis who were the first to propose the concept of dynamically balanced trees. In an AVL tree, the heights of the left and right subtrees of any node differ by at most one. Rebalancing is done whenever the height-balanced property is violated. Since it is height-balanced, the time complexities of all the operations are search, insertion or deletion is O(log n) in both the average and worst cases.