TREES Recursion Review Base Case how we exit

TREES

Recursion Review • Base Case- how we exit and don’t go into infinite recursion • Some work • Division of work • Recursive call (s) • For many of you, recursion is intimidating. Eventually it will become second nature just as loops and file operations have.

Recursive Process • Decide if you want to use recursion • Decide inputs and outputs • Decide how to break down the work • Tentatively decide on a base case • Make recursive calls • Bring back together the results • Return the proper values • Finalize your base case • Trace the recursion

Practice - Sum the numbers from 1 to n int sum(int n){ if(n==1){ return n; } int cur. Sum=n+sum(n-1); return cur. Sum; }

Practice - Sum array int sum( int* arr, int pos, int size){ if(pos==size-1) return arr[pos]; return arr[pos]+sum(arr, pos+1, size); }

Practice - Linked List class Node { public: int value; Node *next; Node( int val, Node *n = NULL ){ value=val; next=n; } };

Practice - Linked List Print Void print(Node* cur){ if( cur==NULL) return; cout<<cur->value; print(cur->next); }

Binary Search Tree • What is a tree? • What is a Binary search tree?

Binary Search Tree • Is a binary tree (each node has two pointers to children) • Ordered to facilitate searching • Anything to the left is a smaller value • Anything to the right is a greater value • Children are binary search trees • Cannot have duplicate values because it violates the search property

Example 1

At your seats • Build a tree from these nodes • B R L M T C A N P D

Deletion • We need to preserve the binary search properties • Deleting a leaf is easy, we can just delete it, and set its parent’s pointer to null • The easiest way to delete a node is to find its successor, copy the value over, then delete that leaf node

Code - Node class Node { public: int value; Node *left; Node *right; Node( int val, Node *l = NULL, Node *r = NULL ){ value=val; left=l; right=r; } };

Code - Search Node* search( int value, Node* cur){ if(cur==NULL) return NULL; else if( value == cur->value) return cur; else if( value < cur->value) return search(value, cur->left); else return search(value, cur->right); }

Code - Delete void delete( int value, Node* cur){ }

Complexity • Search • Insert • Delete

Disadvantages • What is my worst case? When will it occur?

Balanced • Balanced means the heights of the left and right sub-trees differ by at most one • This needs to be true for every node in the tree • If a tree is balanced, what is the worst case?

Balanced Examples

Alternatives • AVL and Splay trees • Self balancing

AVL - Adelson, Velskii, Landis • Binary tree • Balanced • Determining if it is an AVL tree • Check each node for • Right sub-tree is an AVL tree • Left sub-tree is an AVL tree • Heights of right and left differ by at most one • AVL search Tree • An AVL tree, but also a binary tree

AVL practice • Is it AVL? Is it AVL search?

AVL • We usually only look at AVL search • When I say AVL, I mean AVL search • If not search, I will specify by saying non-search AVL

Properties • Height is logn • Can do it for any n • Search is logn • Insertion is logn • Deletion is logn

AVL - Search • How do we search?

AVL - Insert • How is it done?

AVL - Rotations • RR • LL • RL • LR

AVL - Single Left Rotation • Fixes a RR inbalance

AVL - Double Left Rotation • Fixes an RL inbalance

AVL Insert • 3, 2, 1, 4, 5, 6, 7, 16, 15, 14

AVL Delete • How do we delete?

AVL Delete • How do we delete? • Same way as in a binary search tree • But the tree can be thrown off balance • Re- balance the tree using rotations • May need to do multiple rotations.

AVL Delete • Rebalancing • Starting where we deleted, we follow the recursion back up the tree • At every node we visit, we need to check that it is still balanced. • If it is not balanced, we use a rotation to fix it • What is the worst case for the number of rotations I have to do?

AVL Delete • Delete 60

More AVL Delete • Delete 70

Example - Delete

Example - Delete

Example - Delete

Delete – Code? int Delete (){ }

Participation Quiz – 5 points 1) Do you like the way I use power points to guide the lecture? Suggestions? 2) Do you feel I do a good job answering in class questions? Suggestions? 3) Do you find the examples, and asking for class guidance through them helpful? Suggestions? 4) Write a short snipet of code that has O(n) complexity. It can be simple, and does not need to do anything useful. 5) Which trees drawn on the board are AVL? (remember I mean AVL search) I want this to be the best learning experience possible for you, so please include any other comments or suggestions you have for improving the course.
- Slides: 40