AVL Trees CSCI 2720 Fall 2005 Kraemer. Binary Tree Issue  One major problem with the binary trees we have discussed thus far: they can become extremely.

Slides:



Advertisements
Similar presentations
AVL Trees1 Part-F2 AVL Trees v z. AVL Trees2 AVL Tree Definition (§ 9.2) AVL trees are balanced. An AVL Tree is a binary search tree such that.
Advertisements

1 AVL Trees (10.2) CSE 2011 Winter April 2015.
Chapter 4: Trees Part II - AVL Tree
AVL Trees COL 106 Amit Kumar Shweta Agrawal Slide Courtesy : Douglas Wilhelm Harder, MMath, UWaterloo
AVL Trees Balancing. The AVL Tree An AVL tree is a balanced binary search tree. What does it mean for a tree to be balanced? It means that for every node.
Trees Types and Operations
AVL Tree Smt Genap Outline AVL Tree ◦ Definition ◦ Properties ◦ Operations Smt Genap
CS202 - Fundamental Structures of Computer Science II
Binary Search Trees Briana B. Morrison Adapted from Alan Eugenio.
1 Balanced Search Trees  several varieties  AVL trees  trees  Red-Black trees  B-Trees (used for searching secondary memory)  nodes are added.
Self-Balancing Search Trees Chapter 11. Chapter 11: Self-Balancing Search Trees2 Chapter Objectives To understand the impact that balance has on the performance.
Self-Balancing Search Trees Chapter 11. Chapter Objectives  To understand the impact that balance has on the performance of binary search trees  To.
AVL Trees ITCS6114 Algorithms and Data Structures.
AVL Trees v z. 2 AVL Tree Definition AVL trees are balanced. An AVL Tree is a binary search tree such that for every internal node v of T, the.
Binary Trees – Part I CS 367 – Introduction to Data Structures.
Version TCSS 342, Winter 2006 Lecture Notes Trees Binary Trees Binary Search Trees.
CSE373: Data Structures & Algorithms Optional Slides: AVL Delete Dan Grossman Fall 2013.
INTRODUCTION TO AVL TREES P. 839 – 854. INTRO  Review of Binary Trees: –Binary Trees are useful for quick retrieval of items stored in the tree –order.
INTRODUCTION TO BINARY TREES P SORTING  Review of Linear Search: –again, begin with first element and search through list until finding element,
Balanced Trees AVL Trees Red-Black Trees 2-3 Trees Trees.
COSC 1030 Lecture 9 Binary Trees. Topics Basic Concept and Terminology Applications of Binary Tree Complete Tree Representation Traversing Binary Trees.
Course: Programming II - Abstract Data Types Red-Black TreesSlide Number 1 Balanced Search Trees Binary Search Tree data structures can allow insertion,
Copyright Curt Hill Balance in Binary Trees Impact on Performance.
Starting at Binary Trees
1 Trees 4: AVL Trees Section 4.4. Motivation When building a binary search tree, what type of trees would we like? Example: 3, 5, 8, 20, 18, 13, 22 2.
CS 367 – Introduction to Data Structures
Binary Search Trees (BSTs) 18 February Binary Search Tree (BST) An important special kind of binary tree is the BST Each node stores some information.
Week 10 - Friday.  What did we talk about last time?  Graph representations  Adjacency matrix  Adjacency lists  Depth first search.
AVL Trees An AVL tree is a binary search tree with a balance condition. AVL is named for its inventors: Adel’son-Vel’skii and Landis AVL tree approximates.
Binary Search Trees (BST)
AVL trees1 AVL Trees Height of a node : The height of a leaf is 1. The height of a null pointer is zero. The height of an internal node is the maximum.
1 CSC TREES AVL & BALANCED TREES. 2 Balanced Trees The advantage of balanced trees is that we can perform most operation in time proportional to.
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees Linda Shapiro Winter 2015.
Copyright © 2012 Pearson Education, Inc. Chapter 20: Binary Trees.
1 AVL Trees II Implementation. 2 AVL Tree ADT A binary search tree in which the balance factor of each node is 0, 1, of -1. Basic Operations Construction,
8/3/2007CMSC 341 BTrees1 CMSC 341 B- Trees D. Frey with apologies to Tom Anastasio.
Keeping Binary Trees Sorted. Search trees Searching a binary tree is easy; it’s just a preorder traversal public BinaryTree findNode(BinaryTree node,
BSTs, AVL Trees and Heaps Ezgi Shenqi Bran. What to know about Trees? Height of a tree Length of the longest path from root to a leaf Height of an empty.
Balancing Binary Search Trees. Balanced Binary Search Trees A BST is perfectly balanced if, for every node, the difference between the number of nodes.
CS202 - Fundamental Structures of Computer Science II
CS202 - Fundamental Structures of Computer Science II
AVL DEFINITION An AVL tree is a binary search tree in which the balance factor of every node, which is defined as the difference between the heights of.
Introduction Applications Balance Factor Rotations Deletion Example
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
AVL Tree Mohammad Asad Abbasi Lecture 12
AVL Trees "The voyage of discovery is not in seeking new landscapes but in having new eyes. " - Marcel Proust.
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
Chapter 20: Binary Trees.
Binary Search Trees.
Chapter 21: Binary Trees.
AVL Trees CENG 213 Data Structures.
Binary Search Tree AVL Tree
CS 367 – Introduction to Data Structures
Balanced-Trees This presentation shows you the potential problem of unbalanced tree and show two way to fix it This lecture introduces heaps, which are.
AVL Trees: AVL Trees: Balanced binary search tree
CS202 - Fundamental Structures of Computer Science II
CSE 373: Data Structures and Algorithms
CSE373: Data Structures & Algorithms Lecture 5: AVL Trees
Balanced-Trees This presentation shows you the potential problem of unbalanced tree and show two way to fix it This lecture introduces heaps, which are.
CSE 373: Data Structures and Algorithms
Lecture No.20 Data Structures Dr. Sohail Aslam
CS202 - Fundamental Structures of Computer Science II
CSE 373 Data Structures and Algorithms
Lecture 9: Self Balancing Trees
ITCS6114 Algorithms and Data Structures
Richard Anderson Spring 2016
Lecture 10: BST and AVL Trees
CS202 - Fundamental Structures of Computer Science II
CS202 - Fundamental Structures of Computer Science II
AVL Trees: AVL Trees: Balanced binary search tree
Presentation transcript:

AVL Trees CSCI 2720 Fall 2005 Kraemer

Binary Tree Issue  One major problem with the binary trees we have discussed thus far: they can become extremely unbalanced  this will lead to long search times in the worst case scenario, inserts are done in order  this leads to a linked list structure possible O(n) performance  this is not likely but it’s performance will tend to be worse than O(log n)

Binary Tree Issue BinaryTree tree = new BinaryTree(); tree.insert(A); tree.insert(C); tree.insert(F); tree.insert(M); tree.insert(Z); root A C F M Z

Balanced Tree  In a perfectly balanced tree all leaves are at one level each non-leaf node has two children root M C E JO S W  Worst case search time is log n

AVL Tree  AVL tree definition a binary tree in which the maximum difference in the height of any node’s right and left sub- trees is 1 (called the balance factor)  balance factor = height(right) – height(left)  AVL trees are usually not perfectly balanced however, the biggest difference in any two branch lengths will be no more than one level

AVL Tree AVL Tree 0Not an AVL Tree

AVL Tree Node  Very similar to regular binary tree node must add a balance factor field  For this discussion, we will consider the key field to also be the data this will make things look slightly simpler  they will be confusing enough as it is 

AVL Tree Node class TreeNode { public Comparable key; public TreeNode left; public TreeNode right; public int balFactor; public TreeNode(Comparable key) { this.key = key; left = right = null; balFactor = 0; }

Searching AVL Trees  Searching an AVL tree is exactly the same as searching a regular binary tree all descendants to the right of a node are greater than the node all descendants to the left of a node are less than the node

Searching an AVL Tree Object search(Comparable key, TreeNode subRoot) { I) if subRoot is null (empty tree or key not found) A) return null II) compare subRoot’s key (K r ) to search key (K s ) A) if K r < K s -> recursively call search with right subTree B) if K r > K s -> recursively call search with left subTree C) if K r == K s -> found it! return data in subRoot }

Inserting in AVL Tree  Insertion is similar to regular binary tree keep going left (or right) in the tree until a null child is reached insert a new node in this position  an inserted node is always a leaf to start with  Major difference from binary tree must check if any of the sub-trees in the tree have become too unbalanced  search from inserted node to root looking for any node with a balance factor of ±2

Inserting in AVL Tree  A few points about tree inserts the insert will be done recursively the insert call will return true if the height of the sub-tree has changed  since we are doing an insert, the height of the sub-tree can only increase if insert() returns true, balance factor of current node needs to be adjusted  balance factor = height(right) – height(left) left sub-tree increases, balance factor decreases by 1 right sub-tree increases, balance factor increases by 1 if balance factor equals ±2 for any node, the sub-tree must be rebalanced

Inserting in AVL Tree M(-1) insert(V) E(1) J(0) P(0) M(0) E(1) J(0) P(1) V(0) M(-1) insert(L) E(1) J(0) P(0) M(-2) E(-2) J(1) P(0) L(0) This tree needs to be fixed!

Re-Balancing a Tree  To check if a tree needs to be rebalanced start at the parent of the inserted node and journey up the tree to the root  if a node’s balance factor becomes ±2 need to do a rotation in the sub-tree rooted at the node  once sub-tree has been re-balanced, guaranteed that the rest of the tree is balanced as well can just return false from the insert() method 4 possible cases for re-balancing  only 2 of them need to be considered other 2 are identical but in the opposite direction

Re-Balancing a Tree  Case 1 a node, N, has a balance factor of 2  this means it’s right sub-tree is too long inserted node was placed in the right sub-tree of N’s right child, N right  N’s right child have a balance factor of 1 to balance this tree, need to replace N with it’s right child and make N the left child of N right

Case 1 M(1) insert(Z) E(0) V(0) R(1) M(2) E(0) V(1) R(2) Z(0) rotate(R, V) M(1) E(0) Z(0) V(0) R(0)

Re-Balancing a Tree  Case 2 a node, N, has a balance factor of 2  this means it’s right sub-tree is too long inserted node was placed in the left sub-tree of N’s right child, N right  N’s right child have a balance factor of -1 to balance this tree takes two steps  replace N right with its left child, N grandchild  replace N with it’s grandchild, N grandchild

Case 2 M(1) insert(T) E(0) V(0) R(1) M(2) E(0) V(-1) R(2) rotate(V, T) T(0)M(2) E(0) T(1) R(2) V(0) rotate(T, R) M(1) E(0) V(0) T(0) R(0)

Rotating a Node  It can be seen from the previous examples that moving nodes really means rotating them around rotating left  a node, N, has its right child, N right, replace it  N becomes the left child of N right  N right ’s left sub-tree becomes the right sub-tree of N rotating right  a node, N, has its left child, N left, replace it  N becomes the right child of N left  N left ’s right sub-tree becomes the left sub-tree of N

Rotate Left V(1) R(2) X(1) T(0) N(0) rotateLeft(R) X(1) V(0) Z(0)T(0) R(0) N(0) Z(0)

Re-Balancing a Tree  Notice that Case 1 can be handled by a single rotation left or in the case of a -2 node, a single rotation right  Case 2 can be handled by a single rotation right and then left or in the case of a -2 node, a rotation left and then right

Rotate Left  void rotateLeft(TreeNode subRoot, TreeNode prev) { I) set tmp equal to subRoot.right A) not necessary but makes things look nicer II) set prev equal to tmp A) caution: must consider rotating around root III) set subRoot’s right child to tmp’s left child IV) set tmp’s left child equal to subRoot V) adjust balance factor subRoot.balFactor -= (1 + max(tmp.balFactor, 0)); tmp.balFactor -= (1 – min(subRoot.balFactor, 0)); }

Re-Balancing the Tree  void balance(TreeNode subRoot, TreeNode prev) { I) if the right sub-tree is out of balance (subRoot.factor = 2) A) if subRoot’s right child’s balance factor is -1 -> do a rotate right and then left B) otherwise (if child’s balance factor is 1 or 0) -> do a rotate left only I) if the left sub-tree is out of balance (subRoot.factor = -2) A) if subRoot’s left child’s balance factor is 1 -> do a rotate left and then right B) otherwise (if child’s balance factor is -1 or 0) -> do a rotate right only }

Inserting a Node  boolean insert(Comparable key, TreeNode subRoot, TreeNode prev) { I ) compare subRoot.key to key A) if subRoot.key is less than key 1) if subRoot doesn’t have a right child -> subRoot.right = new node(); -> increment subRoot’s balance factor by 1 2) if subRoot does have a right subTree -> recursively call insert with right child -> if true returned, increment balance by 1 -> otherwise return false B) if the balance factor of subRoot is now 0, return false C) if balance factor of subRoot is 1, return true D) otherwise, the balance factor of subRoot is 2 1) rebalance the tree rooted at subRoot }