# Data Structures & Algorithms III: AVL and 2-4 Trees, Divide and Conquer Algorithms

## Syllabus

Module 0: Introduction and Review

• Review of important Java principles involved in object-oriented design
• The Iterator & Iterable design patterns, and the Comparable & Comparator interfaces
• Basic “Big-Oh” notation and asymptotic analysis

Module 8: AVL Trees

• Explore the AVL tree subgroup from Binary Search Trees (BST) and their distinguishing properties
• Discover the self-balancing of AVL trees, and which rotations are used to balance
• Implement the entire AVL tree data structure, and examine its performance

Module 9: (2-4) Trees

• Extend understanding of tree structures beyond binary trees to a more complex model
• Study the properties of (2-4) trees, and how operations maintain those properties
• Recognize when overflow and underflow situations arise within the (2-4) tree, and how to resolve those situations with promotion, fusion and transfer

Module 10: Iterative Sorting Algorithms

• Understand and implement four basic iterative, comparison sorting algorithms: Bubble Sort, Insertion Sort, Selection Sort and Cocktail Shaker Sort
• Examine the characteristics of sorting algorithms: Stability, Adaptation and Memory
• Implement optimizations of these algorithms to yield better performance
• Analyze the time complexity of each of the algorithms

Module 11: Divide & Conquer Sorting Algorithms

• Introduction to the Divide & Conquer approach to sorting algorithms
• Implement and comprehend each of the divide & conquer algorithms presented: Merge Sort, In-Place Quick Sort and LSD Radix sort
• Examine the stability and memory usage of these sorting algorithms
• Explore the novel approach that LSD Radix sort uses to solve the sorting dilemma