Share

Book

# An Introduction to Binary Search Trees and Balanced Trees

12 years 4 months ago
"Libavl is a library in ANSI C for manipulation of various types of binary trees. This book provides an introduction to binary tree techniques and presents all of Libavl’s source code, along with annotations and exercises for the reader. It also includes practical information on how to use Libavl in your programs and discussion of the larger issues of how to choose efficient data structures and libraries. The book concludes with suggestions for further reading, answers to all the exercises, glossary, and index."
Ben Pfaff
 Added 14 Feb 2009 Updated 14 Feb 2009 Authors Ben Pfaff
Preface
Acknowledgements
1 Introduction
1.1 Audience
1.3 Code Conventions
2.1 Informal Definition
2.2 Identifiers.
2.3 Comparison Function
2.4 Item and Copy Functions
2.5 Memory Allocation
2.6 Creation and Destruction
2.7 Count
2.8 Insertion and Deletion
2.9 Assertions
2.10 Traversers
2.10.1 Constructors
2.10.2 Manipulators
3 Search Algorithms
3.1 Sequential Search
3.2 Sequential Search with Sentinel.
3.3 Sequential Search of Ordered Array
3.4 Sequential Search of Ordered Array with Sentinel
3.5 Binary Search of Ordered Array
3.6 Binary Search Tree in Array
3.7 Dynamic Lists
4 Binary Search Trees
4.1 Vocabulary
4.1.1 Aside: Differing Definitions
4.2 Data Types
4.2.1 Node Structure
4.2.2 Tree Structure
4.2.3 Maximum Height
4.3 Rotations
4.4 Operations
4.5 Creation
4.6 Search
4.7 Insertion
4.7.1 Aside: Root Insertion
4.8 Deletion
4.8.1 Aside: Deletion by Merging
4.9 Traversal
4.9.1 Traversal by Recursion
4.9.2 Traversal by Iteration
4.9.2.1 Improving Convenience
4.9.3 Better Iterative Traversal
4.9.3.1 Starting at the Null Node.
4.9.3.2 Starting at the First Node
4.9.3.3 Starting at the Last Node
4.9.3.4 Starting at a Found Node
4.9.3.5 Starting at an Inserted Node
4.9.3.6 Initialization by Copying
4.9.3.7 Advancing to the Next Node
4.9.3.8 Backing Up to the Previous Node
4.9.3.9 Getting the Current Item
4.9.3.10 Replacing the Current Item
4.10 Copying
4.10.1 Recursive Copying
4.10.2 Iterative Copying
4.10.3 Error Handling
4.11 Destruction
4.11.1 Destruction by Rotation
4.11.2 Aside: Recursive Destruction
4.11.3 Aside: Iterative Destruction
4.12 Balance
4.12.1 From Tree to Vine
4.12.2 From Vine to Balanced Tree
4.12.2.1 General Trees
4.12.2.2 Implementation
4.12.2.3 Implementing Compression
4.13 Aside: Joining BSTs
4.14 Testing
4.14.1 Testing BSTs.
4.14.1.1 BST Verification
4.14.1.2 Displaying BST Structures
4.14.2 Test Set Generation
4.14.3 Testing Overflow
4.14.4 Memory Manager.
4.14.5 User Interaction
4.14.6 Utility Functions
4.14.7 Main Program
5 AVL Trees
5.1 Balancing Rule
5.1.1 Analysis
5.2 Data Types
5.3 Operations
5.4 Insertion
5.4.1 Step 1: Search
5.4.2 Step 2: Insert
5.4.3 Step 3: Update Balance Factors
5.4.4 Step 4: Rebalance
5.4.5 Symmetric Case
5.4.6 Example
5.4.7 Aside: Recursive Insertion
5.5 Deletion
5.5.1 Step 1: Search
5.5.2 Step 2: Delete
5.5.3 Step 3: Update Balance Factors
5.5.4 Step 4: Rebalance
5.5.5 Step 5: Finish Up
5.5.6 Symmetric Case
5.6 Traversal
5.7 Copying
5.8 Testing
6 Red-Black Trees
6.1 Balancing Rule
6.1.1 Analysis
6.2 Data Types
6.3 Operations
6.4 Insertion
6.4.1 Step 1: Search
6.4.2 Step 2: Insert
6.4.3 Step 3: Rebalance
6.4.4 Symmetric Case
6.4.5 Aside: Initial Black Insertion
6.4.5.1 Symmetric Case
6.5 Deletion
6.5.1 Step 2: Delete
6.5.2 Step 3: Rebalance
6.5.3 Step 4: Finish Up
6.5.4 Symmetric Case
6.6 Testing
7.2 Data Types
7.3 Operations
7.4 Creation
7.5 Search
7.6 Insertion
7.7 Deletion
7.8 Traversal
7.8.1 Starting at the Null Node
7.8.2 Starting at the First Node
7.8.3 Starting at the Last Node
7.8.4 Starting at a Found Node
7.8.5 Starting at an Inserted Node
7.8.6 Initialization by Copying
7.8.7 Advancing to the Next Node
7.8.8 Backing Up to the Previous Node
7.9 Copying
7.10 Destruction
7.11 Balance
7.11.1 From Tree to Vine
7.11.2 From Vine to Balanced Tree
7.12 Testing
8.1 Data Types
8.2 Rotations.
8.3 Operations
8.4 Insertion
8.4.1 Steps 1 and 2: Search and Insert
8.4.2 Step 4: Rebalance
8.4.3 Symmetric Case
8.5 Deletion
8.5.1 Step 1: Search
8.5.2 Step 2: Delete
8.5.3 Step 3: Update Balance Factors
8.5.4 Step 4: Rebalance
8.5.5 Symmetric Case
8.5.6 Finding the Parent of a Node
8.6 Copying
8.7 Testing
9.1 Data Types
9.2 Operations
9.3 Insertion
9.3.1 Steps 1 and 2: Search and Insert
9.3.2 Step 3: Rebalance
9.3.3 Symmetric Case
9.4 Deletion
9.4.1 Step 1: Search
9.4.2 Step 2: Delete
9.4.3 Step 3: Rebalance
9.4.4 Step 4: Finish Up
9.4.5 Symmetric Case
9.5 Testing
10.1 Data Types
10.2 Operations
10.3 Search
10.4 Insertion
10.5 Deletion
10.5.1 Right-Looking Deletion
10.5.2 Left-Looking Deletion
10.5.3 Aside: Comparison of Deletion Algorithms
10.6 Traversal
10.6.1 Starting at the First Node.
10.6.2 Starting at the Last Node
10.6.3 Starting at a Found Node
10.6.4 Advancing to the Next Node
10.6.5 Backing Up to the Previous Node
10.7 Copying
10.8 Destruction
10.9 Balance
10.10 Testing
11.1 Data Types
11.2 Operations
11.3 Rotations
11.4 Insertion
11.4.1 Steps 1–2: Search and Insert
11.4.2 Step 4: Rebalance
11.5 Deletion
11.5.1 Step 1: Search
11.5.2 Step 2: Delete
11.5.3 Step 3: Update Balance Factors
11.5.4 Step 4: Rebalance
11.6 Copying
11.7 Testing
12.1 Data Types
12.2 Operations
12.3 Insertion
12.3.1 Steps 1 and 2: Search and Insert
12.3.2 Step 3: Rebalance
12.4 Deletion
12.4.1 Step 2: Delete
12.4.2 Step 3: Rebalance
12.4.3 Step 4: Finish Up
12.5 Testing
13 BSTs with Parent Pointers
13.1 Data Types
13.2 Operations
13.3 Insertion
13.4 Deletion
13.5 Traversal
13.5.1 Starting at the First Node.
13.5.2 Starting at the Last Node
13.5.3 Starting at a Found Node
13.5.4 Starting at an Inserted Node
13.5.5 Advancing to the Next Node
13.5.6 Backing Up to the Previous Node
13.6 Copying
13.7 Balance
13.8 Testing
14 AVL Trees with Parent Pointers
14.1 Data Types
14.2 Rotations
14.3 Operations
14.4 Insertion
14.4.1 Steps 1 and 2: Search and Insert
14.4.2 Step 3: Update Balance Factors
14.4.3 Step 4: Rebalance
14.4.4 Symmetric Case
14.5 Deletion
14.5.1 Step 2: Delete
14.5.2 Step 3: Update Balance Factors
14.5.3 Step 4: Rebalance
14.5.4 Symmetric Case
14.6 Traversal
14.7 Copying
14.8 Testing
15 Red-Black Trees with Parent Pointers
15.1 Data Types
15.2 Operations
15.3 Insertion
15.3.1 Step 2: Insert
15.3.2 Step 3: Rebalance
15.3.3 Symmetric Case
15.4 Deletion
15.4.1 Step 2: Delete
15.4.2 Step 3: Rebalance
15.4.3 Step 4: Finish Up
15.4.4 Symmetric Case
15.5 Testing
Appendix A References
Appendix B Supplementary Code
B.1 Option Parser
B.2 Command-Line Parser
Appendix C Glossary
Appendix D Answers to All the Exercises
Appendix E Catalogue of Algorithms
Binary Search Tree Algorithms.
AVL Tree Algorithms
Red-Black Tree Algorithms