CSE 373 AVL trees read: Weiss Ch. 4, section

Slides:



Advertisements
Similar presentations
CSE 373 Data Structures and Algorithms
Advertisements

CPSC 252 AVL Trees Page 1 AVL Trees Motivation: We have seen that when data is inserted into a BST in sorted order, the BST contains only one branch (it.
AVL Trees COL 106 Amit Kumar Shweta Agrawal Slide Courtesy : Douglas Wilhelm Harder, MMath, UWaterloo
Trees Types and Operations
AVL Tree Smt Genap Outline AVL Tree ◦ Definition ◦ Properties ◦ Operations Smt Genap
1 CSE 373 AVL trees, continued read: Weiss Ch. 4, section slides created by Marty Stepp
AVL Trees ITCS6114 Algorithms and Data Structures.
1 BST Trees A binary search tree is a binary tree in which every node satisfies the following: the key of every node in the left subtree is.
Building Java Programs Binary Search Trees; TreeSet.
CSE 143 Lecture 22 Binary Search Trees continued; Tree Sets read slides adapted from Marty Stepp and Hélène Martin
Data Structures AVL Trees.
CSE 143 Lecture 21 Binary Search Trees, continued read slides created by Marty Stepp
© Copyright 2012 by Pearson Education, Inc. All Rights Reserved. 1 Chapter 20 AVL Trees.
CSE332: Data Abstractions Lecture 7: AVL Trees
AVL Trees CSE, POSTECH.
CSE 373, Copyright S. Tanimoto, 2002 Binary Search Trees -
Lecture 15 Nov 3, 2013 Height-balanced BST Recall:
File Organization and Processing Week 3
Lec 13 Oct 17, 2011 AVL tree – height-balanced tree Other options:
CSE 373 Binary search trees; tree height and balance
BST Trees
Balancing Binary Search Trees
UNIT III TREES.
CSIT 402 Data Structures II
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.
Chapter 26 AVL Trees Jung Soo (Sue) Lim Cal State LA.
AVL Trees A BST in which, for any node, the number of levels in its two subtrees differ by at most 1 The height of an empty tree is -1. If this relationship.
CS 201 Data Structures and Algorithms
Chapter 29 AVL Trees.
CSE373: Data Structures & Algorithms
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
Balanced Trees (AVL and RedBlack)
AVL Tree 27th Mar 2007.
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 22 : Binary Trees, AVL Trees, and Priority Queues
AVL Tree A Balanced Binary Search Tree
TCSS 342, Winter 2006 Lecture Notes
Building Java Programs
AVL Trees CENG 213 Data Structures.
CS202 - Fundamental Structures of Computer Science II
AVL Trees: AVL Trees: Balanced binary search tree
CS202 - Fundamental Structures of Computer Science II
CSE 373: Data Structures and Algorithms
CSE 373: Data Structures and Algorithms
CSE373: Data Structures & Algorithms Lecture 5: AVL Trees
CSE 373, Copyright S. Tanimoto, 2002 Binary Search Trees -
Data Structures & Algorithms
CSE 373: Data Structures and Algorithms
AVL Trees CSE 373 Data Structures.
CSE 332: Data Abstractions AVL Trees
AVL Search Tree put(9)
CSE 373 Data Structures and Algorithms
CE 221 Data Structures and Algorithms
Self-Balancing Search Trees
CS202 - Fundamental Structures of Computer Science II
Lecture 21: Binary Search Trees; TreeSet
CSE 373 Data Structures and Algorithms
AVL Trees (a few more slides)
Lecture 10 Oct 1, 2012 Complete BST deletion Height-balanced BST
CSE 373 Priority queue implementation; Intro to heaps
ITCS6114 Algorithms and Data Structures
Lecture 21: Binary Search Trees; TreeSet
CSE 373 Data Structures Lecture 8
Lecture 9: Intro to 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:

CSE 373 AVL trees read: Weiss Ch. 4, section 4.1 - 4.4 slides created by Marty Stepp http://www.cs.washington.edu/373/ © University of Washington, all rights reserved.

Trees and balance balanced tree: One whose subtrees differ in height by at most 1 and are themselves balanced. A balanced tree of N nodes has a height of ~ log2 N. A very unbalanced tree can have a height close to N. The runtime of adding to / searching a BST is closely related to height. Some tree collections (e.g. TreeSet) contain code to balance themselves as new nodes are added. 19 7 14 6 9 8 4 root height = 4 (balanced)

Some height numbers Observation: The shallower the BST the better. Average case height is O(log N) Worst case height is O(N) Simple cases such as adding (1, 2, 3, ..., N), or the opposite order, lead to the worst case scenario: height O(N). For binary tree of height h: max # of leaves: 2h-1 max # of nodes: 2h - 1 min # of leaves: 1 min # of nodes: h 21 18 20 8 15 14 2 root

Calculating tree height Height is max number of nodes in path from root to any leaf. height(null) = 0 height(a leaf) = ? height(A) = ? Hint: it's recursive! height(a leaf) = 1 height(A) = 1 + max( height(A.left), height(A.right)) A A.left A.right

AVL trees AVL tree: a binary search tree that uses modified add and remove operations to stay balanced as its elements change one of several kinds of auto-balancing trees (others in book) invented in 1962 by two Russian mathematicians (Adelson-Velskii and Landis) A-V & L proved that an AVL tree's height is always O(log N). basic idea: When nodes are added to / removed from the tree, if the tree becomes unbalanced, repair the tree until balance is restored. rebalancing operations are relatively efficient (O(1)) overall tree maintains a balanced O(log N) height, fast to add/search

Balance factor balance factor, for a tree node T : = height of T's right subtree minus height of T's left subtree. BF(T) = Height(T.right) - Height(T.left) (the tree at right shows BF of each node) an AVL tree maintains a "balance factor" in each node of 0, 1, or -1 i.e. no node's two child subtrees differ in height by more than 1 it can be proven that the height of an AVL tree with N nodes is O(log N) -2 3 1 -1

AVL tree examples Two binary search trees: (a) an AVL tree (b) not an AVL tree (unbalanced nodes are darkened)

Which are valid AVL trees? What is the balance factor of each tree node? 14 9 28 6 31 44 5 2 7 4 2 5 3 9 4 20 15 22 11 33 -1 -2 3 -4 8 3 1

Tracking subtree height Many of the AVL tree operations depend on height. Height can be computed recursively by walking the tree; too slow. Instead, each node can keep track of its subtree height as a field: private class TreeNode { private E data; private int height; private TreeNode left; private TreeNode right; } 10 data 4 4 height 10 left/ right 3 2 5 20 2 1 1 1 2 9 15 30 1 7

AVL add operation For all AVL operations, we assume the tree was balanced before the operation began. Adding a new node begins the same as with a typical BST, traversing left and right to find the proper location and attaching the new node. But adding this new node may unbalance the tree by 1: set.add(49); 55 29 87 -3 42 49

AVL add cases Consider the lowest node k2 that has now become unbalanced. The new offending node could be in one of the four following grandchild subtrees, relative to k2: 1) Left-Left, 2) Left-Right, 3) Right-Left, 4) Right-Right

Key idea: rotations If a node has become out of balanced in a given direction, rotate it in the opposite direction. rotation: A swap between parent and left or right child, maintaining proper BST ordering. 25 8 rotate right 8 3 25 3 11 11

Right rotation right rotation (clockwise): (fixes Case 1 (LL)) left child k1 becomes parent original parent k2 demoted to right k1's original right subtree B (if any) is attached to k2 as left subtree

Right rotation example What is the balance factor of k2 before and after rotating?

Right rotation steps Detach left child (11)'s right subtree (27) (don't lose it!) Consider left child (11) be the new parent. Attach old parent (43) onto right of new parent (11). Attach new parent (11)'s old right subtree (27) as left subtree of old parent (43). 11 43 8 27 65 3 11 43 8 27 65 3 11 43 8 27 65 3

Right rotation code private TreeNode rightRotate(TreeNode oldParent) { // 1. detach left child's right subtree TreeNode orphan = oldParent.left.right; // 2. consider left child to be the new parent TreeNode newParent = oldParent.left; // 3. attach old parent onto right of new parent newParent.right = oldParent; // 4. attach new parent's old right subtree as // left subtree of old parent oldParent.left = orphan; oldParent.height = height(oldParent); // update nodes' newParent.height = height(newParent); // height values return newParent; }

Right rotation code private int height(TreeNode node) { if (node == null) { return 0; } int left = (node.left == null) ? 0 : node.left.height; int right = (node.right == null) ? 0 : node.right.height; return Math.max(left, right) + 1;

Left rotation left rotation (counter-clockwise): (fixes Case 4 (RR)) right child k2 becomes parent original parent k1 demoted to left k2's original left subtree B (if any) is attached to k1 as left subtree

Left rotation steps Detach right child (65)'s left subtree (51) (don't lose it!) Consider right child (65) be the new parent. Attach old parent (43) onto left of new parent (65). Attach new parent (65)'s old left subtree (51) as right subtree of old parent (43). 21 43 65 51 87 73 65 43 87 51 21 73 65 87 43 73 21 51

Left rotation code private TreeNode leftRotate(TreeNode oldParent) { // 1. detach right child's left subtree TreeNode orphan = oldParent.right.left; // 2. consider right child to be the new parent TreeNode newParent = oldParent.right; // 3. attach old parent onto left of new parent newParent.left = oldParent; // 4. attach new parent's old left subtree as // right subtree of old parent oldParent.right = orphan; oldParent.height = height(oldParent); // update nodes' newParent.height = height(newParent); // height values return newParent; }

Problem cases A single right rotation does not fix Case 2 (LR). (Similarly, a single left rotation does not fix Case 3 (RL).)

Left-right double rotation left-right double rotation: (fixes Case 2 (LR)) 1) left-rotate k3's left child ... reduces Case 2 into Case 1 2) right-rotate k3 to fix Case 1

Left-right rotation example What is the balance factor of k1, k2, k3 before and after rotating?

Right-left double rotation right-left double rotation: (fixes Case 3 (RL)) 1) right-rotate k1's right child ... reduces Case 3 into Case 4 2) left-rotate k1 to fix Case 4

AVL add example Draw the AVL tree that would result if the following numbers were added in this order to an initially empty tree: 20, 45, 90, 70, 10, 40, 35, 30, 99, 60, 50, 80 99 80 90 60 70 50 20 45 10 40 30 35